2021-09-10 jwt的内置签发方式修改返回格式 jwt签发的源码分析 drf_jwt认证的token源码 自定义user表实现jwt的token签发 RBAC介绍 simple-ui的使用

上节回顾

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配置的分页类的对象
    	self.paginator.paginate_queryset(queryset, self.request, view=self)
    -GenericAPIView找get_paginated_response方法
    	#self.paginator配置的分页类的对象
		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, ]#drf_jwt
    	permission_classes = [IsAuthenticated] # drf

今日内容

1 jwt内置签发方法修改返回格式(***)

# 写一个函数
def jwt_response_payload_handler(token, user=None, request=None):
    return {
   
        'token':token,
        'username':user.username
    }
# 在配置文件中配置
#drf_jwt的配置文件(drf_jwt有个默认配置文件:from rest_framework_jwt import settings)
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签发的源码分析

# 路由的---》obtain_jwt_token---》ObtainJSONWebToken.as_view()---》视图类ObtainJSONWebToken----》
class ObtainJSONWebToken(JSONWebTokenAPIView)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装 `djangorestframework` 和 `djangorestframework-jwt` 库: ``` pip install djangorestframework pip install djangorestframework-jwt ``` 然后在 Django 项目的 `settings.py` 文件中添加以下配置: ```python INSTALLED_APPS = [ # ... 'rest_framework', 'rest_framework.authtoken', 'rest_framework_jwt', # ... ] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), } JWT_AUTH = { 'JWT_SECRET_KEY': 'your-secret-key', 'JWT_ALGORITHM': 'HS256', 'JWT_ALLOW_REFRESH': True, 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7), 'JWT_AUTH_HEADER_PREFIX': 'Bearer', } ``` 其中,`JWT_SECRET_KEY` 是一个随机字符串,用于加密生成 JWT token。 接下来,在 Django 项目的 `urls.py` 文件中添加以下代码: ```python from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token urlpatterns = [ # ... path('api-token-auth/', obtain_jwt_token), path('api-token-refresh/', refresh_jwt_token), path('api-token-verify/', verify_jwt_token), # ... ] ``` 这里添加了三个路由,用于获取、刷新、验证 JWT token。 最后,为需要登录认证的接口添加装饰器,例如: ```python from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @api_view(['GET']) @permission_classes([IsAuthenticated]) def my_view(request): content = {'message': 'Hello, World!'} return Response(content) ``` 这里使用了 `@permission_classes([IsAuthenticated])` 装饰器,示只有通过 JWT token 认证的用户才能访问该接口。 至此,我们完成了 Django DRF 框架的 JWT 登录认证接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值