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大总结的更多相关文章
- 《JAVA语言程序设计》上课笔记
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一. 问几个问题 1. 你们到这里来干什么 ...
- drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族
目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...
- DRF中两大视图基类APIView/GenericAPIView的介绍
(1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父类. APIView与V ...
- drf序列化大总结
目录 一.APIView的请求生命周期 二.序列化组件 视图类中使用序列化 Meta配置类中的配置 自定义校验规则 入库方法 自定义字段 如果有群改操作 重(难)点 三.视图家族 四.路由组件 五.权 ...
- django drf 10大请求序列化方法
## 整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py ```python"""1) 单整体改,说明前台要提供修改的数据,那么数据就需要 ...
- 深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台
深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台 大家好,欢迎大家参加这次DC/OS的技术分享. 先做个自我介绍,刘超,Linker Networks首席架构师,Open DC/OS社区 ...
- DRF缓存
对于现在的动态网站来讲,所有的界面展示都是通过客户端请求服务端,服务端再去请求数据库,然后将请求到的数据渲染后返回给客户端.用户每次访问页面都需要去请求数据库,如果同时有多个人访问的话,对于我们的数据 ...
- drf相关问题
drf自定义用户认证: 登录默认 使用django的ModelBackend,对用户名和密码进行验证.但我们平时登录网站时除了用户名也可以用邮箱或手机进行登录,这就需要我们自己扩展backend 一. ...
- DRF之频率限制、分页、解析器和渲染器
一.频率限制 1.频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 2.频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通 ...
随机推荐
- spring-framework核心接口ApplicationContext
核心接口(ApplicationContext) 继承关系 继承接口: org.springframework.beans.factory.ListableBeanFactory:用于访问应用程序组件 ...
- Leetcode Week2 Two Sum
Question Given an array of integers, return indices of the two numbers such that they add up to a sp ...
- 分类问题(三)混淆矩阵,Precision与Recall
混淆矩阵 衡量一个分类器性能的更好的办法是混淆矩阵.它基于的思想是:计算类别A被分类为类别B的次数.例如在查看分类器将图片5分类成图片3时,我们会看混淆矩阵的第5行以及第3列. 为了计算一个混淆矩阵, ...
- [CF2B] The least round way - dp
给定由非负整数组成的n×n 的正方形矩阵,你需要寻找一条路径: 以左上角为起点 每次只能向右或向下走 以右下角为终点 并且,如果我们把沿路遇到的数进行相乘,积应当是最小"round" ...
- 在IIS中配置申请的SSL证书
第一步,右键服务器证书=>打开功能 第二步,右侧选择导入,将申请到的证书按窗体内容导入即可 第三步,右键需要加载证书的网站,选择编辑绑定=>类型选择https=>选择刚才导入的数字证 ...
- Selenium3+python自动化010-UnitTest框架简介和单元测试框架使用
一.UnitTest介绍 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过, ...
- SpringMVC的代码访问流程示意图
- Oracle监听出现的问题总结,以及解决办法
包括的错误类型: 1.ORA-12541: TNS: 无监听程序 2. ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 3.ORA-12560: TNS: 协议适配器错误 ...
- eureka server 单节点与多节点部署演示
环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...
- Python警告:InsecureRequestWarning、InsecurePlatformWarning、SNIMissingWarning
SSL警告 urllib3将基于证书验证支持的级别发出几种不同的警告.这些警告表示特定情况,可以通过不同方式解决. InsecureRequestWarning 当在未启用证书验证的情况下对HTTPS ...