Table of Contents
- AnonRateThrottle 限制匿名用户,使用IP区分
DEFAULT_THROTTLE_RATES['anon']
来设置频次
- UserRateThrottle 限制认证用户,使用userid区分
DEFAULT_THROTTLE_RATES['user']
来设置频次
- ScopedRateThrottle 限制view视图类,使用throttle_scope 属性区分
- throttle_scope 在继承drf框架的view中定义名称
- DEFAULT_THROTTLE_RATES 使用名称进行限流
- anon,user
- 自定义throttle_scope 名称
- DEFAULT_THROTTLE_RATES 周期
- second, minute, hour 或day来指明周期。
- 周期需要定义在全局配置文件中,或者重写
- THROTTLE_RATES = api_settings.DEFAULT_THROTTLE_RATES
- setattr(ScopedRateThrottle, "THROTTLE_RATES", rate)
- rate是一个字典 定义了访问规则
-
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle' ), 'DEFAULT_THROTTLE_RATES': { 'anon': '100/day', 'user': '1000/day' } }
-
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.ScopedRateThrottle', ), 'DEFAULT_THROTTLE_RATES': { 'contacts': '1000/day', #视图中自定义throttle_scope名称 'uploads': '20/day' } }
DRF 过滤 Filtering
- 需要安装和注册
- pip install django-filter
- APPS中添加 django_filters
- 指定过滤方法
- DEFAULT_FILTER_BACKENDS:中指定
- ('django_filters.rest_framework.DjangoFilterBackend',)
- 在类中指定过滤字段
- filter_fields = (,) models字段
- 在路径中 携带字符串
- /books?btitle=图书
DRF 排序 OrderingFilter
- 设置 filter_backends=( 指定排序方法)
- 指定为OrderingFilter
- ordering_fields = (排序字段,排序字段)
- 指定字段 (id,name,…)
- 使用排序
- url?ordering=-id (-是降序)
DRF 分页器 Pagination
- 全局(不常用)
- DEFAULT_PAGINATION_CLASS
- PAGE_SIZE
-
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100 # 每页数目 }
- 局部方式
- 定义一个Pagination类(继承PageNumberPagination)
- page_size 属性 每页数目
- page_size_query_param 字符串参数,就是查询关键字
- max_page_size 最多多少条数据
- 指定类创建的Pagination类
- pagination_class = 类
-
class LargeResultsSetPagination(PageNumberPagination): page_size = 1000 page_size_query_param = 'page_size' max_page_size = 10000 class BookDetailView(RetrieveAPIView): queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer pagination_class = LargeResultsSetPagination # pagination_class = None
- 定义一个Pagination类(继承PageNumberPagination)
- 可选分页器(调用方式不同)
- PageNumberPagination
- 可以在子类中定义的属性:
- page_size 每页数目
- page_query_param 第几页,默认为"page"
- page_size_query_param 每页条数关键字 默认None‘
- max_page_size 一页设置最多是多少条
- 可以在子类中定义的属性:
- LimitOffsetPagination
- 可以在子类中定义的属性:
- default_limit 默认限制,默认值与
PAGE_SIZE
设置一直 - limit_query_param limit参数名,默认'limit'
- offset_query_param offset参数名,默认'offset'
- max_limit 最大limit限制,默认None
- default_limit 默认限制,默认值与
- 可以在子类中定义的属性:
- PageNumberPagination
DRF 异常处理
- 1.配置文件中指定异常类(是包名,不是元组)
- 2.新建处理类异常类,放入utils
-
# 通用异常处理 from rest_framework.views import exception_handler def custom_exception_handler(exc, context): # 先调用REST framework默认的异常处理方法获得标准错误响应对象 response = exception_handler(exc, context) # 在此处补充自定义的异常处理 if response is not None: response.data['status_code'] = response.status_code return response
-
-
REST framework定义的异常
- APIException 所有异常的父类
- ParseError 解析错误
- AuthenticationFailed 认证失败
- NotAuthenticated 尚未认证
- PermissionDenied 权限决绝
- NotFound 未找到
- MethodNotAllowed 请求方式不支持
- NotAcceptable 要获取的数据格式不支持
- Throttled 超过限流次数
- ValidationError 校验失败
自动生成接口文档(鸡肋)
- 一般项目都是先有文档,才能开发(对个人开发者很友好)
- 文档描述说明的位置
- pip install coreapi
4.扩展延伸知识
-
jinja2全局变量
- 1.定义一个py文件
- 2.定义函数environment(**options)
- 3.函数中定义一个env = Environment(**options)
- 4.给env添加属性 globals.update({}) 添加的属性就是全局对象
- 5.返回env对象
- 6.在settings文件中 指定Backend为jinja2引擎
- 7.在OPTIONS中添加environment值为自定义py文件包名
-
拓展类子类
- CreateAPIView post方法
- ListAPIView get方法
- RetireveAPIVIew get方法 一个目标
- DestoryAPIView delete方法
- UpdateAPIView put 和patch方法
- https://blog.csdn.net/weixin_40226313/article/details/80832658
-
xpath匹配head节点
- 直接匹配/html/head 、
- 里面的元素都没有文本,所以都是匹配属性
5.知识内容个人梳理
6.今天都复习了之前的什么内容
jinja2全局变量
- 1.定义一个py文件
- 2.定义函数environment(**options)
- 3.函数中定义一个env = Environment(**options)
- 4.给env添加属性 globals.update({}) 添加的属性就是全局对象
- 5.返回env对象
- 6.在settings文件中 指定Backend为jinja2引擎
- 7.在OPTIONS中添加environment值为自定义py文件包名
拓展类子类
- CreateAPIView post方法
- ListAPIView get方法
- RetireveAPIVIew get方法 一个目标
- DestoryAPIView delete方法
- UpdateAPIView put 和patch方法
- https://blog.csdn.net/weixin_40226313/article/details/80832658
xpath匹配head节点
- 直接匹配/html/head 、
- 里面的元素都没有文本,所以都是匹配属性
6.今天都复习了之前的什么内容