上节回顾
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)