接口文档 jwt介绍和原理 drf-jwt快速使用 定制返回格式

今日内容总结

接口文档

# 接口文档如何编写
	-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_doce_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
                
"""
接口文档 需要有的东西
    -描述
    -地址
    -请求方式
    -请求编码格式
    -请求数据详情(必填 类型)
    -放回格式案列
    -放回数据字段解释
    -错误码
"""

jwt介绍和原理

#JWT的构成 三部分 每部分用 .分割
eg:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

"""
-头: header
	声明类型,这里是jwt
	声明加密的算法(通常直接使用 HMAC SHA256)
	公司信息
-荷载:payload
	存放有效信息的地方(过期时间 签发时间 用户id 用户名字等)
-签名:signature
	第一部分和第二部分通过密钥+加密方式得到的

"""

# jwt开发重点
	-登录接口---> 签发token
  	-认证类 ---> jwt认证
    
# base64编码和解码

import base64
import json
Dic = {'user_id':1,'username':'xiaochen'}
dic_str = json.dumps(dic)

将这个字符串使用base64编码
res = base64.b64encode(dic_str.encode('utf-8'))
print(res)
"""
得到的结果:
b"eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogInhpYW9jaGVuIn0="
"""
# 注: base64编码后 字符长度一定是4的倍数 如果不是 使用=补齐 (=不表示数据)

# 解码
res=base64.b64decode('eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogInhpYW9jaGVuIn0=')
print(res)

# base64应用场景
"""
1.jwt 使用了base64
2.网络中传输数据 也会经常使用 base64编码
3.网络传输中 有的图片使用base64编码
"""
s='图片地址'
with open('本地地址','wb') as f:
    f.write(res)

drf-jwt快速使用

# django+drf 平台开发jwt这套 具有两个模块
	-djangorestframework-jwt ---> 一直都可以用
 	-djangorestframework-simplejwt---> 公司用的多
	-自己封装jwt签发和认证
# 使用步骤
	-1 安装djangorestframework-jwt
 	-2 快速签发token---> 登入接口(路由中配置)
    	path('login/', obtain_jwt_token),
    -3 postman发送请求 携带username和password
    

定制返回格式

# 以后 如果是基于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测试,就能看到返回的格式了

jwt的认证类

# 以后接口要登录后才能访问的使用

	1 在视图类上加一个认证类,一个权限类class BookView(ViewSetMixin, RetrieveAPIView):
    	authentication_classes = [JSONWebTokenAuthentication]
    	permission_classes = [IsAuthenticated]  # 登录用户有权限,不登录用户没权限
	2 postman测试
    	-请求头中key值叫Authorization
        -请求头的value值是:  jwt 有效的token值
posted @ 2023-02-09 21:46  早点早点灬  阅读(80)  评论(0)    收藏  举报