首页 > 其他分享 >drf(10)jwt

drf(10)jwt

时间:2023-02-09 20:11:06浏览次数:44  
标签:10 base64 jwt 接口 --- token 文档 drf

1 接口文档

# 前后端分离
    -我们做后端,写接口
    -前端做前端,根据接口写app,pc,小程序
    
    -作为后端来讲,我们很清楚,比如登录接口  /api/v1/login/---->post---->username,password 编码方式json----》返回的格式  {code:100,msg:登录成功}
    
    -后端人员, 接口写完, 一定要写接口文档
   

# 接口文档如何编写
	-1 使用word, md 编写接口文档
    -2 使用第三方平台,编写我们的接口文档(非常多) ---》收费
    	-https://www.showdoc.com.cn/item/index
    -3 公司自己使用第三方开源的搭建--->Yapi---> 如果自己想要搭建
    	-https://zhuanlan.zhihu.com/p/366025001
        
    -4 使用drf编写的接口 可以自动生成接口文档
    	-swagger---》drf-yasg---》官方推荐使用
        -coreapi----》咱们讲
        
       
    
 # 使用coreapi自动生成接口文档步骤
    -1 安装
    -2 路由配置
        from rest_framework.documentation import include_docs_urls
        path('docs/', include_docs_urls(title='xx项目接口文档')),	
    -3 在视图类,方法上 写注释即可
    	-在类上加注释
        -在类的方法上加注释
        -在序列化类或表模型的字段上 加 help_text, required....
        
      
    -4 配置文件配置
    	REST_FRAMEWORK = {
     		'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',

    	}
        
     -5 访问地址:http://127.0.0.1:8000/docs
            
      
  # 接口文档, 需要有的东西
	 -描述
      -地址
        -请求方式
      -请求编码格式
      -请求数据详解(必填, 类型)
      -返回格式案例
       -返回数据字段解释
       -错误码

2 jwt介绍和原理

# cookie session token 发展史


# Json web token (JWT)  就是web方向token的使用


#JWT的构成 三部分每部分用 .  分割
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
	
     - 头: header
           声明类型  这里是jwt
           声明加密算法  通常直接使用  HMAC SHA256
           公司信息
     # 完整的头部就像下面这样的JSON:
    	{
            'typ':'JWT',
            'alg':'HS256'
        }
      # 然后将头部进行base64加密(该加密是可以对称解密的), 构成了第一部分
    	eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
	
    -荷载: payload
    # 载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
    1 标准中注册的声明
    2 公共的声明
    3 私有的声明
          -存放有效信息的地方
          -过期时间
          -签发时间
          -用户id
          -用户名字。。
     -签名: signature
          -第一部分和第二部分通过密钥+加密方式得到的
      JWT的第三部分是一个签证信息,这个签证信息由三部分组成:
    	header(base64后的)
        payload(base64后的)
        secret
            
           
 # Jwt开发重点
	  -登录接口 ---- >签发token
       -认证类----> jwt认证
        
       
    
#  base64编码和解码


import base64
import json
 dic={'user_id':1,'username':"lqz"}

 dic_str=json.dumps(dic)

#把这个字符串使用base64编码
 res=base64.b64encode(dic_str.encode('utf-8'))
 print(res)   #


# 注意:base64编码后,字符长度一定是4的倍数,如果不是,使用  =  补齐,  = 不表示数据
# 解码
res=base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=')
print(res)



# base64 应用场景
'''
1 jwt 使用了base64
2 网络中传输数据,也会经常使用 base64编码
3 网络传输中,有的图片使用base64编码

'''
s=''
res=base64.b64decode(s)
with open('a.png','wb') as f:
    f.write(res)

3 drf-jwt 快速使用

#django+drf 平台开发jwt这套,有两个模块
	-djangorestframework-jwt  ---》一直可以用
    -djangorestframework-simplejwt---》公司用的多---》希望你们试一下
    -自己封装jwt签发和认证
# 使用步骤
	- 1 安装
    - 2 快速签发token---》登录接口,路由中配置
    	path('login/', obtain_jwt_token),
    -3  postman,向http://127.0.0.1:8000/login/发送post请求,携带username和password
            
               

4 定制返回格式

# 以后 如果基于auth的User表签发token, 就可以不自己写了,但是登录接口返回的格式,只有token 不符合公司规范


# 使用步骤
	1 写个函数: jwt_response_payload_handler
        def jwt_response_payload_handler(token, user=None, request=None):
            return {
                'code': 100,
                'msg': '登录成功',
                'token': token,
                'username': user.username
                # 'icon':user.icon
            }
    2 配置一下 ,项目配置文件
    JWT_AUTH = {
    	'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',  
	}
    
    3 使用postman测试,就能看到返回的格式了

5 jwt的认证类

# 以后接口要登录后才能访问的使用
	
    1 在视图类上加一个认证类,一个权限类class BookView(ViewSetMixin, RetrieveAPIView):
    	authentication_classes = [JSONWebTokenAuthentication]
    	permission_classes = [IsAuthenticated]  # 登录用户有权限,不登录用户没权限
	2 postman测试
    	-请求头中key值叫Authorization
        -请求头的value值是:  jwt 有效的token值

标签:10,base64,jwt,接口,---,token,文档,drf
From: https://www.cnblogs.com/wei0919/p/17106866.html

相关文章