DRF十大组件

节流

作用:

节流(Throttling)类似于权限,因为它决定了是否应该对请求进行授权。节流表示一个临时状态,并用于控制客户端对API的请求率。

使用方法:

1.使用步骤1:写一个类,继承SimpleRateThrottle
2.使用步骤2:def get_cache_key(self, request, view):,记住传request对象和view
3.使用步骤3
:'DEFAULT_THROTTLE_RATES': {
这个key跟scope对应,value值3/m 3/h 4/d
'xx': '3/m'
}(在setting中配置)

序列化

作用

1,请求数据的验证,对queryset的序列化
2,创建URL

使用方法

Serailizer使用:

定义序列化类继承Serailizer,类中定义与模型表一一对应的字段,然后再定义局部钩子和全局钩子做校验用,重写create和update方法,最后再视图类中实例化序列化类,通过.data取到序列化后的数据

ModelSerailizer:

在Serailizer的基础上进行了进一步的封装,主要体现在3个地方:
1、在序列化类中定义字段不需要全部都自己定义映射关系,只需要配置class Meta 里的模型表model 和字段fields
2、在存和修改的时候不需要在序列化类中实现父类的create和update方法,ModelSerailizer已经做了封装,当然,这是只针对单表的操作,如果涉及多表的操作,我们也可以自己重写create和update方法
3、在校验数据成功后只需要通过ret.save()即可执行create操作,ret.update即可执行更新操作

认证

检测用户是否登录

使用方法

(1)创建认证类
(2)authenticate()返回值(三种)
(3)局部使用
(4)全局使用
设置全局认证 REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES":['API.utils.auth.Authentication',] }

权限

作用

简单的说就是对某件事情决策的范围和程度,例如对数据的操作,普通用户只能查看,管理员用户可以增删改查

版本在前面,然后是认证,然后是权限,最后是频率

使用方法

1.定义一个权限类

class MyPermission(BasePermission):
message = "VIP用户才能访问"
def has_permission(self, request, view):
"""
自定义权限只有vip用户能访问,
注意我们初始化时候的顺序是认证在权限前面的,所以只要认证通过~
我们这里就可以通过request.user,拿到我们用户信息
request.auth就能拿到用户对象
"""
if request.user and request.auth.type == 2:
return True
else:
return False

2.局部注册

class TestAuthView(APIView):
# 执行认证
authentication_classes = [MyAuth, ]
# 执行权限
permission_classes = [MyPermission, ]
def get(self, request, *args, **kwargs):
print(request.user)
print(request.auth)
username = request.user
return Response(username)

3.全局注册

REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
# 配置全局认证
# 'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
# 配置全局权限
"DEFAULT_PERMISSION_CLASSES": ["BROP.utils.MyPermission"]

视图

作用

数据库查询, 构建序列化器, 进行序列化操作, 返回数据

使用方法

1.局部使用:throttle_classes = [VisitThrottle](写在views中)
2.全局使用:REST_FRAMEWORK={"DEFAULT_THROTTLE_CLASSES":["app01.auth.VisitThrottle"]}(在setting中配置)
3.全局使用的局部禁用:throttle_classes = [](写在views中)

解析器

作用

解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程,本质就是对请求体中的数据进行解析。

使用方法

1.局部使用:parser_classes=[JSONParser,](写在views中)
2.全局使用:'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'](在setting中配置)

渲染器

作用

渲染器就是把数据有格式的、友好地展示出来

使用方法

DRF给我们提供的渲染器有
'DEFAULT_RENDERER_CLASSES': (
  'rest_framework.renderers.JSONRenderer',
  'rest_framework.renderers.BrowsableAPIRenderer',
),

分页

作用

我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输过程中耗时也会比较大,这时就用到了分页

使用方法

全局:REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100#每页的数据个数
}

局部:class PublisherViewSet(ModelViewSet):
queryset = models.Publisher.objects.all()
serializer_class = PublisherModelSerializer
pagination_class = PageNumberPagination # 注意不是列表(只能有一个分页模式)

版本

作用

为了区别新旧版本,所以我们对版本进行控制

使用方法

1.在setting.py中配置
REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
}

  1. urls.py中配置
    urlpatterns = [
    url(r"^versions", MyView.as_view()),
    url(r"^(?P[v1|v2]+)/test01", TestView.as_view()),
    ]

3.视图view
class TestView(APIView):
def get(self, request, *args, **kwargs):
print(request.versioning_scheme)
ret = request.version
if ret == "v1":
return Response("版本v1的信息")
elif ret == "v2":
return Response("版本v2的信息")
else:
return Response("根本就匹配不到这个路由")

路由

作用

我们写路由时候对于增删该查可能写多个路由,其实我们可以借助DRF的router自动帮我们生成路由

使用方法

1.基本路由:url(r'^admin/', admin.site.urls)
2.半自动路由: url(r'^users/$', views.Users.as_view({'get':'list','post':'create'})),必须继承:ViewSetMixin,继承顺序

你可能感兴趣的:(DRF十大组件)