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 校验失败

浙公网安备 33010602011771号