drf框架知识点总复习
接口
"""
1、什么是接口:url+请求参数+响应数据 | 接口文档
2、接口规范:
url:https,api,资源(名词复数), v1,get|post表示操作资源的方式, ?过滤条件
响应数据:status,msg,results|data,url资源数据
"""
DRF入门
""" 1、封装风格 2、请求生命周期:走APIView的as_view => View的as_view调用APIView的dispatch => 分发给视图类的请求函数 => 响应 3、请求模块:二次封装request 4、解析模块:局部全局配置,form-data、urlencoding、json 5、渲染模块:局部全局配置,html、json 6、响应模块:Response(data, http_status, header)
data={'detail': serializer_obj.errors} => http_status=4..|5..
# 4,5开头字段状态码,前台axios请求响应会解析到catch分支
axios({}).then().catch() 7、二次封装Response:
i) 继承Response
ii) 自定义参数格式化成data,传给 super().__init__(data=data)
iii) 网络状态码、响应头等信息带给super().__init__() 8、异常模块:在请求生命周期中,分发请求任务执行时,被一个超大的try except包裹,一旦出现任何异常,都会交给exception_handler函数处理
自定义原因:系统只处理了部分,所以手动还需要处理;后期异常信息需要记录到日志文件
工作流程:先交给drf处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理
"""
序列化组件
# 1)可以将model对象序列化成可以返回给前台的json数据
# 2)可以校验前台传来的数据,完成model的增与改
模型层
class User(models.Model):
name = models.CharField(max_length=16) # 自定义插拔序列化字段 - 完成连表深度查询
@property
def my_name(self):
return self.name
序列化层
class UserListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
for index, obj in enumerate(instance):
self.child.update(obj, validated_data[index])
return instance class UserModelSerializer(serializers.ModelSerializer):
# 自定义反序列化不入库字段 - 要在钩子函数校验后移除
check_name = serializers.CharFiled(write_only=True)
class Meta:
model = User
fields = ['name', 'my_name', 'check_name']
extra_kwargs = {
'my_name': {
'read_only': True
}
}
# 群改
list_serializer_class = UserListSerializer
# 局部、全局钩子
# create、update方法不需要重写,可以完成单增、群增、单改
视图层
class UserAPIView(APIView):
def get(self, request, *args, **kwargs):
# 先orm得到 user_query | user_obj # 在得到序列化对象
user_ser = UserModelSerializer(user_query, many=True)
user_ser = UserModelSerializer(user_query, many=False) # 返回序列化结果 user_ser.data
def post(self, request, *args, **kwargs):
# 数据给序列化类
user_ser = UserModelSerializer(data=user_list, many=True)
user_ser = UserModelSerializer(data=user_dic, many=False)
# 校验数据
user_ser.is_valid(raise_exception=True)
# 数据库操作
user_query|user_obj = user_ser.save() def patch(self, request, *args, **kwargs):
# 根据主键或主键们确定要修改的 对象 或 对象们 # 数据给序列化类
user_ser = UserModelSerializer(data=user_list, many=True, instance=对象们, partial=True|False)
user_ser = UserModelSerializer(data=user_dic, many=False, instance=对象, partial=True|False)
# 校验数据
user_ser.is_valid(raise_exception=True)
# 数据库操作
user_query|user_obj = user_ser.save()
三大认证
"""
1、认证组件:
i)自定义认证类继承BaseAuthentication,重写authenticate方法
ii)规则:游客返回None,非法用户抛异常,合法用户返回(user, auth)
iii)全局局部配置 2、权限组件:
i)自定义权限类继承BasePermission,重写has_permission方法
ii)规则:有权限返回True,无权限返回False - 校验对象:request.user或请求方式
iii)全局局部配置 3、评论组件:
i)自定义频率类继承SimpleRateThrottle,重写get_cache_key方法,设置scope类属性
ii)全局配置scope对应的访问频率:次数/时间
iii)get_cache_key返回的是与限制条件有关的动态字符串 - 限制条件来源于请求参数或请求头
iv)全局局部配置 4、jwt认证:
i)客户端存token,服务器存签发算法、校验算法、秘钥
ii)基本信息(头base64).用户信息过期时间(载荷base64).全信息+秘钥(签名HS256)
iii)drf-jwt组件使用
iv)登录接口签发token
v)认证组件校验token
"""
群查过滤组件
"""
1、搜索组件:search_fields = ['name', 'price'] 2、排序组件:ordering_fields = ['pk', 'price'] 3、分页组件:pagination_class = pagenations.MyPageNumberPagination 4、django-filter过滤插件:filter_class = CarFilterSet 5、自定义过滤器:自定义过滤类实现filter_queryset即可,根据筛选条件筛选后再返回queryset即可 使用:
i)视图类添加过滤类:filter_backends = [SearchFilter, OrderingFilter, LimitFilter, DjangoFilterBackend]
ii)为不同的过滤类配置过滤条件
"""
drf框架知识点总复习的更多相关文章
- drf框架总结复习(1)
Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成j ...
- drf框架,restful接口规范,源码分析
复习 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 {{ }} ...
- 程序员必懂:javaweb三大框架知识点总结
原文链接:http://www.cnblogs.com/SXTkaifa/p/5968631.html javaweb三大框架知识点总结 一.Struts2的总结 1.Struts 2的工作流程,从请 ...
- drf框架接口文档
drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...
- drf框架serializers中ModelSerializer类简化序列化和反序列化操作
0905自我总结 drf框架serializers中ModelSerializer类 基于seriallizer类进行简化 https://www.cnblogs.com/pythonywy/p/11 ...
- DRF框架和Vue框架阅读目录
Vue框架目录 (一)Vue框架(一)——Vue导读.Vue实例(挂载点el.数据data.过滤器filters).Vue指令(文本指令v-text.事件指令v-on.属性指令v-bind.表单指令v ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)
解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...
- 第三章、drf框架 - 序列化组件 | Serializer
目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...
随机推荐
- msf中arp_sweep使用报错:usbmon1:ERROR while getting interface flags:no such device
在许多的工具使用中,会出现很多的错误,要养成先思考再去寻找帮助的习惯 在用use命令使用arp_sweep模块的时候爆出错误:usbmon1:ERROR while getting interface ...
- vs code 切换语言(切换回英文)
安装中文 安装教程:https://www.cnblogs.com/chenxi188/protected/p/11757456.html 切换回英文 调出搜索:ctrl+shift+p 输入:lan ...
- 大数据高可用集群环境安装与配置(04)——安装JAVA运行环境
Hadoop运行在java环境,所以在安装Hadoop之前,需要安装好jdk 提前下载好jdk安装包(jdk-8u161-linux-x64.tar.gz),将它上传到指定的安装目录当中,然后运行安装 ...
- 二十八、CI框架之自己写分页类,符合CI的路径规范
一.参照了CSDN上某个前辈写的一个CI分页类,自己删删改改仿写了一个类似的分页类,代码如下: 二.我们在模型里面写2个数据查询的函数,一个用于查询数据数量,一个用于查询出具体数据 三.我们在控制器里 ...
- DevOps专题|Packer使用教程
什么是Packer 简单介绍一下自己 Packer 是一个轻量命令行工具, 能在几乎所有主流的操作系统上运行. 在给定一份配置文件的情况下, Packer 能为多种系统架构创建云主机镜像.同时 Pac ...
- [XNUCA2019Qualifier]EasyPHP
0x00 知识点 预期解中知识点: htaccess生效 如果尝试上传htaccess文件会发现出现响应500的问题,因为文件尾有Just one chance 这里采用# \的方式将换行符转义成普通 ...
- axios请求接口的时候带一个参数
getHomeInfo () { this.axios.get('/api/index.json?city=' + this.city) .then(this.getHomeInfoSucc) } 尽 ...
- chan-vese模型
Python--level set (水平集)和 chan-vese模型 2018年08月28日 10:51:54 GlassySky0816 阅读数:1604 版权声明:本文为博主原创文章,未 ...
- 18 12 30 新建一个 django project
1. 新建一个 django project 1 2 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django- ...
- [SDOI2016]游戏(树剖+李超树)
趁着我把李超树忘个一干二净的时候来复习一下吧,毕竟马上NOI了. 题解:看着那个dis就很不爽,直接把它转换成深度问题,然后一条直线x->y,假设其lca为z,可以拆分成x->z和z-&g ...