Django drf学习

 

初始界面文件解析:

 

manage.py:管理网站组态的档案,接收命令指令的工具程式

settings.py:网站系统设计所在的位置

urls.py:用来对应每一个URL网址要对应的函数以及对应的方式

wsgi.py:和虚拟主机中的网页伺服器(如Apache)沟通的界面

 

 

序列化:模型数据 -> python字典(用于输出,返回数据给前端)

 

#序列化器的类应该单独创建一个serializers.py

 

1.定义序列化器类(模型名/类视图名 Serializer),如HeroInfoSerializer

2.定义序列化器中的字段 参照模型(序列化器中的字段可以比模型多或少,如果表示是模型中的字段,则序列华中的字段名应和模型中字段名一致)

3.如果在多里面关联序列化——(外键) 如果是在一里面关联序列化多(多的一方模型名小写_set)

4.如果在一的一方关联序列化多时,需要指定关联字段many=True

5.将要序列化模型或查询机传给序列化器类的instance参数,如果传的是查询集 多指定many=True

6.获取序列化后的数据,序列化器对象.data属性

 

反序列化:拿到前端传入的数据 -> 序列化的data-> 调用序列化器的is_valid()方法进行校验 -> 调用序列化器的.save()方法 

 

1:获取前端传入的json字典数据

2:创建序列化器,给序列化器中的data参数传参(要以关键字方式传递)

3:调用序列化器的.is_valid(raise_exception=True)进行校验,如果校验出错会自动抛出错误信息

4:调用序列化器的.save()方法,调用save时会判断当初创建序列化器时是否有传入instance

5:如果传了instance也传了data,那么调用save实际调用序列化器中的update方法,反之就是create方法

6:反序列化最后会自动帮忙完成序列化

 

序列化器中可选参数:

参数名称 作用
max_length 最大长度
min_length 最小长度
allow_blank 是否允许为空
trim_whitespace 是否阶段空白字符
max_value 最小值
min_value 最大值

序列化器中通用参数:

参数名称 说明
read_only 表明该字段仅用于序列化输出,默认False
write_only 表明该字段仅用于反序列化输出,默认False
required 表明该字段在反序列化时必须填入,默认True
default 反序列化时使用的默认值
allow_null 表明该字段是否允许传入None. 默认False
validators 该字段使用的验证器
error_message 包含错误编号与错误信息的字典
label 用于HTML展示API页面时,显示的字段名称
help_text 用于HTML展示API页面时,显示的字段帮助提示信息

 

ModelSerializer继承Serializer:

1:ModelSerializer可以根据模型自动生成序列化器中的字段

2:ModelSerializer里面已经帮我们实现了create和update方法

//会传入全部参数,如出现验证密码等场景,需要重写加入validate_data.pop('xxx')

def create(self, validated_data):
    return BookInfo.objects.create(**validate_data)   

def update(self, instance, validated_data):
    instance.password1 = validate_data['ps1']
    instance.password2 = validate_data['ps1']        //error

 

视图:

Request:传入的request不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Reuqest类的对象。

另外REST framework提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将数据进行parse解析,解析为类字典对象保存到Request对象中。

 

.data:类似于request.post和request.FILE属性,包含了解析后的文件和非文件数据;包含了对POST、PUT、PATCH请求方式解析后的数据;利用了REST framework的parsers解析器,不仅支持表单类型数据,也支持JSON数据。

 

.quert_params:与request.GET相同,只是更换了更正确的名字而已。

 

APIView是REST framework提供的所有视图的基类,继承自Django的View父类。支持定义的属性:authentication_classes——身份认证类;permission_classes——权限检查类;throttle_class——流量控制类; GenericAPIView继承自APIView,相比APIView,还加了分页与过滤功能。

 

几个可用子类视图

CreateAPIView:提供post方法,继承自GenericAPIView、CreateModelMixin

ListAPIView:提供get方法,继承自GenericAPIView、ListModelMixin

RetrieveAPIView:提供get方法,继承自GenericAPIView、RetrieveModelMixin

DestroyAPIView:提供delete方法,继承自GenericAPIView、DestroyModelMixin

UpdateAPIView:提供put和patch方法,继承自GenericAPIView、UpdateModelMixin

RetrieveUpdateAPIView:提供get、put、patch方法,继承自GenericAPIView、RetrieveModelMixin、UpdateModelMixin

RetrieveUpdateDestroyView:提供get、put、patch、delete方法......

 

视图集存在的意义:

1:将所有的接口可以写在一个类视图中(类视图中的方法不再用请求方法名小写  行为/动作 list/create)

2:重写了as_view({'get': 'list': 'post': 'create'})方法里面()

 

REST framework定义的异常

APIException      所有异常的父类

ParseError        解析错误

AuthenticationFailed   认证失败

NotAuthenticated     尚未认证

PermissionDenied    权限决绝

NotFound          未找到

MethodNotAllowed      请求方式不支持

NotAcceptable        要获取的数据格式不支持

Throttled          超过限流次数

ValidationError      校验失败

posted @ 2021-12-25 14:53  天叔  阅读(100)  评论(0)    收藏  举报