复习
"""
Serializer类
class MySerializer(Serializer):
usr = serializers.CharField(min_length=3,max_length=10)
pwd = serializers.CharField(min_length=3,max_length=10,write_only=True)
my_usr = serializers.SerializerMethodField(read_only=True)
def get_my_usr(self, obj):
return obj.usr
re_pwd = serializers.CharField(min_length=3,max_length=10,write_only=True)
def validate_usr(self, value):
if 'g' in value.lower():
raise ValidationError('...')
retrun value
def validate(self, attrs):
pwd = attrs.get('pwd')
re_pwd = attrs.pop('re_pwd')
if pwd != re_pwd
raise ValidationError({'re_pwd': '...'})
retrun attrs
自己重写create和update方法,完成增和改的入库操作
ModelSerializer类
class Usr(Model):
@property
def my_usr(self):
return self.usr
class MyModelSerializer(ModelSerializer):
re_pwd = serializers.CharField(min_length=3,max_length=10,write_only=True)
class Meta:
model = Usr
fields = ('usr', 'pwd', 'my_usr', 're_pwd')
extra_kwargs = {
'pwd': {
'write_only': True
}
}
def validate_usr(self, value):
if 'g' in value.lower():
raise ValidationError('...')
retrun value
def validate(self, attrs):
pwd = attrs.get('pwd')
re_pwd = attrs.pop('re_pwd')
if pwd != re_pwd
raise ValidationError({'re_pwd': '...'})
retrun attrs
"""
周总结
接口
"""
1、概念:url + 请求方式 + 请求参数 + 响应结果
2、接口文档:采用某种方式某种平台(Yapi)将接口的四部分呈现成文档形式
3、restful规范:
url:https://api.baidu.com/v1/books/?ordering=-price,id&limit=3
请求方式:get | post | put | patch | delete
响应:
{
'status': 0,
'msg': 'ok',
'results': [
{
'img': https://api.baidu.com/media/img/001.png
}
]
}, http_status=200
4、drf框架:
1)django的插件
2)安装命令:pip install djangorestframework
3)在django项目的settings中注册app
"""
基础模块
"""
1、APIView类
1)继承View
2)as_view:禁用csrf
3)dispatch:请求、解析、三大认证、异常、响应、渲染
4)类属性:局部全局配置
2、请求模块:
1)request兼容request._request
2)request.query_params,request.data
3、解析模块:form-data、urlencoded、json三种格式的数据包解析
4、异常模块:
1)settings中配置自定义异常处理函数
2)重写异常处理函数,先交给drf处理,如果没有处理,自己再处理一下,重点要记录异常日志
5、响应模块:
1)data
2)status:http_status
3)exception
6、渲染模块:json、browser
"""
序列化模块
"""
1、序列化家族:Serializer、ModelSerializer、ListSerializer
1)Serializer:底层系列化
2)ModelSerializer:继承Serializer,用配置反射完成序列化:model,fields,extra_kwargs
3)ListSerializer:辅助ModelSerializer,在ModelSerializer中通过list_serializer_class来配置,建立联系,ListSerializer类的对象.child就是拿到关联的ModelSerializer
2、序列化字段:
1)model类中的字段,可以直接写在fields
2)自定义序列化字段
- 序列化类中:SerializerMethodField
- 模型类中:@property
3、反序列化字段:
1)model类中的字段,可以直接写在fields
2)自定义反序列化字段:
- 序列化类中:字段 = serializer.类型(约束, write_only=True)
4、多表关系:
1)db_constraint断关联
2)relate_name设置反向字段
3)on_delete设置级联关系:级联、不处理、置空、默认值
5、外界连表深度:
1)子序列化
2)depth配置
3)@property自定义序列化字段
6、十大接口:
1)单查群查 => many=True
2)单增群增 => many=True
3)单删群删 => 只做is_delete字段修改,不需要序列化类参与
4)单改群改 => ListSerializer、many=True、partial=True
5)视图序列化传参 => context={}
7、序列化字段规则:提供给前台,前台才能看见,用read_only表示只序列化
8、反序列化字段规则:用write_only表示只反序列化
1)必填字段:不提供就报错,声明默认或设置required=True
2)选填字段:不填不校验,填必校验,声明但是required=False
3)不填字段:不声明,且能不提供就能入库
"""