django rest-framework

现在from rest_framework import routers, serializers, viewsets其实都是从这个drf里引入的
只不过每个viewset类现在都继承自自定义的类ListOnlyModeViewSet和CustomModelViewSet,里面自定义了curd方法

序列化器


class PostSerializer(serializers.ModelSerializer):
    author = serializers.StringRelatedField()  # 显示作者名字而非 ID

    class Meta:
        model = Post
        fields = ['id', 'title', 'author']

# 序列化
serializer = PostSerializer(post)
return Response(serializer.data)  # 自动转为 JSON
image.png

DRF 的 Serializer 会根据你传参的方式(是否带 data=)自动判断是“序列化”还是“反序列化”,但它不是靠“识别内容”(比如看是不是 JSON),而是靠调用时的参数签名!

serializer = PostSerializer(post) # ← 没有 data= 参数!
serializer = PostSerializer(data=data) # ← 明确传了 data= 参数!

data 是一个 字典(通常来自 request.data,本质是解析后的 JSON)
DRF 认为你要 把原始数据验证并转成模型对象
必须调用 is_valid() 验证,然后 save() 才能创建/更新对象

# 前端发来的 JSON 数据
data = {'title': 'New Post', 'content': '...', 'author_id': 5}

# 用 Serializer 反序列化 + 验证
serializer = PostSerializer(data=data)
if serializer.is_valid():
    post = serializer.save()  # 保存到数据库
image.png

如果你写 PostSerializer(post) → instance=post, data=empty → 序列化模式
如果你写 PostSerializer(data=data) → instance=None, data=data → 反序列化模式
💡 DRF 不关心 post 或 data 的内容是什么类型,只看你是怎么传参的!

image.png

image.png

视图

image.png
image.png
image.png

设置 queryset 和 serializer_class
把 HTTP 方法委托给 Mixin
但注意:每个 URL 仍需要一个独立的视图类(比如 list/create 一个类,retrieve/update/delete 另一个类)。


image.png
image.png

我们的项目

image.png

关于视图的action


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • step1:创建模型 step2:创建一个Serializer类 开始使用Web API的第一件事是提供一...
    lijun_m阅读 755评论 0 1
  • DRF是Django的扩展,用于实现 Restful 提供了序列化器 Serializer 、更多的视图类、Mix...
    樗云阅读 2,175评论 0 0
  • WEB 应用模式 前后端不分离 前端页面效果由后端控制(后端渲染页面或重定向) 前端的静态文件(css,js)和后...
    3e0693dcfb2f阅读 557评论 0 0
  • Django REST frameworker 为什么使用DRF在序列化与反序列化操作时,执行的过程相似,将重复的...
    梦醒家先生阅读 990评论 0 0
  • Django REST Framework 1. REST 前后端分离 历史:完全内嵌时代早年,脚本语言是内嵌到H...
    Rockage阅读 532评论 0 4

友情链接更多精彩内容