接口文档和drf-jwt

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_dosc_urls
    	path('docs/', include_docs_urls(title='xx项目接口文档')),
    -3 在视图类,方法上,写注释即可
    	-在类上加注释
        -在类的方法上加注释
        -在序列化类或表模型的字段上加 help_text,required...
        
    -4 配置文件配置
    	REST_FARMEWORK = {
            '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
        公司信息。。。
    -荷载:payload
    	-存放有效信息的地方
        -过期时间
        -签发时间
        -用户id
        -用户名字。。。
    -签名:signature
    	-第一部分和第二部分通过密钥+加密方式得到的
        
# jwt开发重点  
	-登录接口---》签发token
    -认证类----》jwt认证
    
    
# base64编码和解码

import base64
import json
# dict={'user_id': 1, 'username': "guts"}
# dict_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)

image

3 drf-jwt快速使用

# django+drf 平台开发jwt这套,有两个模块
	-djangorestframework-jwt --->一直可以用
    -djangorestframework-simplejwt--->公司用的多---》希望你们试一下
# 使用步骤
	-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值

配置token过期时间
JWT_AUTH={
'JWT_RESPONSE_PAYLOAD_HANDLER':'app01.utils.jwt_response_payload_handler'
}

注意:
-记住的
-JWT_RESPONSE_PAYLOAD_HANDLER
-'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300) # 时间
-了解的
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_SECRET_KEY': settings.SECRET_KEY, # 秘钥配置

posted @ 2023-02-09 20:50  理塘丁真1!5!  阅读(37)  评论(0编辑  收藏  举报