上节回顾
1 过滤的源码分析
-视图类中配置类属性:filter_backends = ['过滤类']
-必须继承他俩ListModelMixin+GenericAPIView
-ListModelMixin的list方法中执行了self.filter_queryset,视图类
-GenericAPIView找filter_queryset方法
for backend in list(self.filter_backends):
queryset = backend().filter_queryset(self.request, queryset, self)
return queryset
2 分页类的源码分析
-视图类中配置类属性: pagination_class = 分页类
-必须继承他俩ListModelMixin+GenericAPIView
-ListModelMixin的list方法中执行了
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
-GenericAPIView找paginate_queryset方法
self.paginator.paginate_queryset(queryset, self.request, view=self)
-GenericAPIView找get_paginated_response方法
self.paginator.get_paginated_response(data)
-具体的分页类:PageNumberPagination
-paginate_queryset
-get_paginated_response
3 继承APIView实现分页
-获取了所有数据
-分页
-实例化得到分页对象
-调用分页对象的paginate_queryset方法完成分页
-把要分页的数据序列化
-把序列化后的数据返回(直接返回和使用get_paginated_response)
4 自定义分页(出去面试,面试官问:如何自定义分页)
-使用当此请求的request对象,取出获取的页码数
-通过页码数和每页显示多少条,具体的取出当前页码的数据
5 jwt:json web token,是一种前后端的登录认证方式,它分token的签发和认证,签发的意思是用户登录成功,生成三段式的token串;认证指的是用户访问某个接口,需要携带token串过来,我们完成认证
6 三段:头.荷载.签名,每一段都通过base64编码
7 base64的编码和解码
8 djangorestframework-jwt:好久没维护了,使用djangorestframework-simplejwt
9 快速使用
-快速签发
-在路由中(登录功能有了,基于auth的user表实现的登录)
path('login/', obtain_jwt_token)
-快速认证
-在视图类中配置
authentication_classes = [JSONWebTokenAuthentication, ]
permission_classes = [IsAuthenticated]
今日内容
1 jwt内置签发方法修改返回格式(***
)
def jwt_response_payload_handler(token, user=None, request=None):
return {
'token':token,
'username':user.username
}
from rest_framework_jwt.utils import jwt_response_payload_handler
JWT_AUTH={
'JWT_RESPONSE_PAYLOAD_HANDLER':'app01.utils.jwt_response_payload_handler'
}
1.2 jwt签发的源码分析
class ObtainJSONWebToken(JSONWebTokenAPIView)