DRF框架的使用入门(三)ModelSerializer和各类View详解

本文深入讲解了Django REST Framework(DRF)中的ModelSerializer的使用,包括三种基本序列化字段方式、嵌套序列化、字段序列化和附加关键字参数。此外,还介绍了request和response的处理,以及APIView、GenericAPIView、mixins和ViewSet的使用,展示了如何在DRF中创建和管理API视图。
摘要由CSDN通过智能技术生成


前文:推荐看官网
环境:版本(django1.11, python3.5),适用于前后端分离项目

详解ModelSerializer

三种基本序列化字段方式

拿之前的过来用:

from rest_framework import serializers
from goods.models import GoodsInfo
# 定义一些序列号程序

class GoodsInfoSerializer(serializers.ModelSerializer):
    # 创建序列化器
    class Meta:
        # 定义元类
        # model指明了当前的序列化器和哪个模型产生联系
        model = GoodsInfo
        fields = '__all__'   # 意思是所有的字段都要
        # 这样写是自己选择需要的字段
        # fields = ('url', 'username', 'email', 'groups')

除了之前两中设置字段对应之外还有第三种:
exclude设置为要从序列化程序中排除的字段列表。

# 不需要写fields
model = GoodsInfo
exclude = ('is_delete',)  # 意思是除了这个字段都包含

指定嵌套序列化

用于有外键的数据库,设置depth为整数,通常为1

from user.models import UserInfo
from rest_framework import serializers


class UserAutoSerializers(serializers.ModelSerializer):

    class Meta:
        model = UserInfo
        fields = '__all__'
        depth = 1

用shell调试结果为:

>>> from user.serializers import *
>>> ser = UserAutoSerializers()
>>> ser
UserAutoSerializers():
    id = IntegerField(label='ID', read_only=True)
    name = CharField(max_length=20)
    password = CharField(max_length=20, required=False)
    phone = CharField(max_length=11)
    addkey = NestedSerializer(read_only=True):
        id = IntegerField(label='ID', read_only=True)
        add = CharField(max_length=50)
>>> 

指定字段序列化(即覆盖)

class AccountSerializer(serializers.ModelSerializer):
    url = serializers.CharField(source='get_absolute_url', read_only=True)
    groups = serializers.PrimaryKeyRelatedField(many=True)

    class Meta:
        model = Account

想要指定readonly字段还有第二个Meta选项,read_only_fields.:

read_only_fields = ('account_name',)

附加关键字参数

还有一个快捷方式,允许您在字段上指定任意附加关键字参数,使用extra_kwargs选择。如在.的情况下read_only_fields,这意味着不需要显式声明序列化程序上的字段。

class Meta:
        model = User
        fields = ('email', 'username', 'password')
        extra_kwargs = {
   'password': {
   'write_only': True}}

request和response

request请求

就是HttpRequest的扩展功能
.data:
request.data返回请求主体的解析内容(可以解析各种类型请求包括POST等)。这与标准类似。request.POST和request.FILES属性除外:

  • 它包括所有已解析的内容,包括文件和非文件投入。
  • 它支持解析除HTTP之外的HTTP方法的内容POST,这意味着您可以访问PUT和PATCH请求。
  • 它支持REST框架灵活的请求解析,而不仅仅是支持表单数据。例如,您可以处理传入表单数据的方式处理传入的JSON数据。

.query_params:
相当于request.GET,但是任何HTTP方法类型都可能包含查询参数,而不仅仅是GET请求

response类

数据类型可以是str,list,dict等

class 
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值