DRF框架入门(二)

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')




		class GoodsInfoSer(serializers.ModelSerializer):
    class Meta:
        #model指明了当前的序列化器产生联系
        model = GoodsModel

        #下面所有字段都以模型为对应

        #fields指明的是需要那些字段
        fields = '__all__'

        #所需要的字段
        fields = ('id','name','pub_date','readcount')
        
        #不需要的字段
        exclude = ('is_delete',)
        
        #只读
        read_only_field = ()

指定嵌套序列化
用于有外键的数据库,设置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 Response(SimpleTemplateResponse):
    """
    An HttpResponse that allows its data to be rendered into
    arbitrary media types.
    """

    def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):

data:为响应准备的序列化之后的数据,status是状态码,template_name模板的名称
headers:响应头信息,content_type:一般不需要指定,框架根据前端传递的信息来指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值