接口文档
作为后端,接口写好了
作为前端,需要使用我们写的接口(移动端、web、桌面端)
后端需要写接口文档
接口文档的展现形式:
1、word,md,写好传到公司的某个平台,前端可以下载
2、自动生成接口文档,后端通过配置,把所写的接口都自动生成,一个地址访问这个地址就能看到所有接口文档
3、公司内部搭建接口文档平台
开源:Yapi (https://zhuanlan.zhihu.com/p/366025001)
自己开发
4、使用第三方平台(花钱),例如showdoc
接口文档如何写,需要什么东西
以用户注册接口为例:
1、接口描述
2、请求地址
3、请求方式
4、编码格式:json,urlencoded,form-data
5、请求参数:参数详解
请求地址参数
请求体参数
6、返回格式示例:返回参数说明
7、备注(可有可无)
自动生成接口文档:coreapi,swagger:drf-yasg
coreapi自动生成:
1、pip install coreapi
2、设置接口文档访问路径
from rest_framework.documentation import include_docs_urls
urlpatterns = [
...
path('docs/', include_docs_urls(title='站点页面标题'))
]
3、在视图中,加注释
4、配置文件配置
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
jwt介绍和构成
做会话保持的发展历史
jwt (Json Web Token):web方向的token认证方案
在用户注册登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证(token串)。我们不再使用session认证机制,而使用Json Web Taken(本质就是token)认证机制
Json Web token(JWT),jwt用在咱们前后端做登录认证的,如果登录了,就携带token过来,如果没有登录,就不携带,后端通过验证token的准确性,确定是谁访问我们
JWT的构成:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
头:header (一般放公司信息,加密方式(这里没有放密钥))
荷载:payload
当前用户信息:用户名,用户id,token过期时间
签名:signature
第一部分和第二部分通过加密得到的字符串
jwt签发与认证
以后使用jwt,最核心的就是写两个地方
1、签发:(登录接口)
登录接口,登录成功,签发token(三段式)
header,用base64编码,暂放
{"company": "公司信息",}
payload,用base64编码,暂放
{用户名,用户权限,过期时间}
使用加密方式:md5,把header和payload都update进md5中,生成前面,base64编码
三段拼接起来,用 . 分割
2、认证(认证类)
用户携带token过来,认证
取出第一部分header
取出第二部分payload
使用之前同样的加密算法(密码),得到新前面
跟token的第三部分比较,如果一样,表示没有被篡改,顺利继续往下走,返回两个值
如果被篡改了,就抛异常
base64编码
base64编码
作用,用途
1、token串使用base64编码
2、互联网中前后端数据交互,可以使用base64编码
3、图片二进制可以使用base64编码传递
base64 的编码和解码(字符串)
编码
d={'name':'lqz','age':19}
d_str=json.dumps(d)
res=base64.b64encode(d_str.encode('utf-8')) # 字符串转bytes格式
print(res) # eyJuYW1lIjogImxxeiIsICJhZ2UiOiAxOX0=
base64编码字符串长度必须是4的倍数,如果不足,用= 补齐,= 一定不会超过3个
解码
res=base64.b64decode('eyJuYW1lIjogImxxeiIsICJhZ2UiOiAxOX0=')
print(res)
把图片保存到本地
res=base64.b64decode(img)
with open('xx.png','wb') as f:
f.write(res)
def-jwt使用
django中使用jwt
可以自己写,使用第三方
-django-rest-framework-jwt:有点老
-djangorestframework-simplejwt:新的
-自己写:
https://gitee.com/liuqingzheng/rbac_manager/blob/master/libs/lqz_jwt/token.py
下载:
pip install djangorestframework-jwt
django-rest-framework-jwt快速使用
签发:
默认使用auth的user表签发,登录接口,人家帮咱们写了
from rest_framework_jwt.views import obtain_jwt_token (这个登录接口,已经帮忙写好了)
urlpatterns = [
path('login/', obtain_jwt_token),
]
认证:(认证类)
视图类上,配置认证类和权限类
authentication_classes = [JSONWebTokenAuthentication,]
permission_classes = [IsAuthenticated]
定制签发返回格式
自定义认证返回结果
写个函数
def jwt_response_payload_handler(token, user=None, request=None):
return {
'status': 100,
'msg': '登录成功',
'token': token,
'username': user.username
}
配置文件配置
JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.response.jwt_response_payload_handler',
}
源码分析
路由配了,就会有个登录接口
path('login/', obtain_jwt_token),
obtain_jwt_token 本质是ObtainJSONWebToken.as_view()
本质是ObtainJSONWebToken
class ObtainJSONWebToken(JSONWebTokenAPIView):
serializer_class = JSONWebTokenSerializer
向login发送post请求,ObtainJSONWebToken一定有个post方法
在父类中 JSONWebTokenAPIView post
登录走的是JSONWebTokenAPIView的post,签发token 是在序列化类中
签发完token执行了,咱们写的jwt_response_payload_handler,所以才能定制返回格式
标签:base64,jwt,接口,认证,token,文档 From: https://www.cnblogs.com/YeeQX/p/17688146.html