接口文档
# 前后端分离
-我们做后端,写接口
-前端做前端,根据接口写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 安装
pip3 install coreapi -i https://pypi.tuna.tsinghua.edu.cn/simple/
-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
# 接口文档,需要有的东西
-描述
-地址
-请求方式
-请求编码格式
-请求数据详解(必填,类型)
-返回格式案例
-返回数据字段解释
-错误码
jwt介绍和原理
Json web token (JWT) 就是web方向token的使用
JWT的构成三部分,每部分用.分割
例子:
yJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
-头:header
声明类型:这里是jwt
声明加密的算法:通常直接使用:HMAC SHA256
公司信息...等
-荷载:payload
-存放有效信息的地方;
-过期时间
-签发时间
-用户id
-用户名字。。。
-签名:signature
-第一部分和第二部分通过秘钥+加密方式得到的
# jwt开发重点
-登录接口---》签发token
认证类---》jwt认证
base64编码和解码
import base64
import json
dic = {'user_id': 1, 'username': "lqz"}
dic = json.dumps(dic)
print(dic) # {"user_id": 1, "username": "lqz"}
#把这个字符串使用base64编码
res = base64.b64encode(dic.encode('utf8'))
print(res) # b'eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogImxxeiJ9'
注意:base64编码后,字符长度一定是4的倍数,如果不是,使用 = 补齐 = 不表示数据
解码:
res=base64.b64decode('eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogImxxeiJ9')
print(res) # b'{"user_id": 1, "username": "lqz"}'
base64 应用场景
"""
1.jwt 使用了base64
2.网络中传输数据,也会经常使用base64
3.网络传输中,有的图片使用base64编码
"""
drf-jwt快速使用
# django+drf平台开了jwt这套,有两个模块
-djangorestframework-jwt ---》一直可以用
-djangorestframework-simplejwt---》公司用的多
-自己封装jwt签发和认证
使用步骤:
-1 安装
pip3 install djangorestframework-jwt -i https://pypi.tuna.tsinghua.edu.cn/simple/
-2 快速签发token---》登录接口,路由中配置
from rest_framework_jwt.views import obtain_jwt_token
path('login/', obtain_jwt_token),
-3 postman,向http://127.0.0.1:8000/login/发送post请求,携带username和password
drf-jwt定制返回格式
如果是基于auth的User表签发token,就可以不自己写了,但是登录接口返回的格式,只有token,不符合公司规范
# 使用步骤
1.写个函数:jwt_response_payload_handler
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 配置一下 ,项目配置文件
REST_FRAMEWORK = {
'JWT_RESPONSE_PAYLOAD_HANDLER':
'app01.jwt_response_payload_handler.jwt_response_payload_handler',
}
3 使用postman测试,就能看到返回的格式了
jwt的认证类
以后接口要登录后才能访问使用
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
1.在视图类上加一个认证类,一个权限类class BookView(ViewSetMixin, RetrieveAPIView):
authentication_classes = [JSONWebTokenAuthentication]
permission_classes = [IsAuthenticated] # 登录用户有权限,不登录用户没权限
2.postman测试
-请求头中key值叫Authorization
-请求头的value值是: jwt"空格"有效的token值
参数解析:
# JWT_EXPIRATION_DELTA
表示issue出去的token多久过期,默认是5mins;
# JWT_REFRESH_EXPIRATION_DELTA
表示某个token被issue出去后,在多久间隔内可以用它来刷新以便获取新的token,默认是7天