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

1|0接口文档、jwt介绍和原理、drf-jwt快速使用、定制返回格式、jwt的认证类

1|1drf-接口文档

我们接口编写好了之后,就需要编写接口文档,给前端的人使用 前端开发人员根据后端人员写的接口写app,pc,小程序 对于后端人员来讲,我们清楚请求地址,请求方式,支持的编码方式,请求参数(get,post参数),返回格式实例 # 为了前后端更好的配合工作,后端写完接口后,一定要写接口文档!!!

1|0接口文档的写法

1.直接使用word或者md写(很多公司现在还在用这种方法) 2.使用接口文档平台,直接在接口文档平台录入 eg: https://www.showdoc.com.cn/(收费) https://hellosean1025.github.io/yapi/(百度开源的自己搭建的) 3.没有钱,不想花钱,也没有能力自己开发的话,那就使用开源的YAPI 教程地址: https://zhuanlan.zhihu.com/p/366025001 4.使用drf编写的接口,开源自动生成接口文档 swagger---》drf-yasg---》官方推荐使用 网址: https://www.django-rest-framework.org/topics/documenting-your-api/ 5.使用coreapi自动生成接口文档

image

# 使用coreapi自动生成接口文档步骤 1.安装 pip3.8 install coreapi -i https://mirrors.aliyun.com/py pi/simple/ spyder 2.配置路由 from rest_framework.documentation import include_docs_urls urlpatterns = [ path('admin/', admin.site.urls), path('api/v1/', include(router.urls)), path('docs/', include_docs_urls(router.urls)), ] 3.在视图类,方法上加注释就好了 4.配置文件配置 REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', }
# 接口文档,需要有的东西 -描述 -地址 -请求方式 -请求编码格式 -请求数据详解(必填,类型) -返回格式案例 -返回数据字段解释 -错误码

image

1|2jwt介绍和原理

Json web token(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(sso)场景,JWT的声明一般被用来在身份提供者和服务者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密

image

img

image

Cookie:是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 Cookie由服务器生成,发给浏览器后,浏览器会把Cookie以kv形式保存到某个目录下的文本文件内,等下次请求时会把该Cookie发给服务器
Session:session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。 session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。
Token:在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。 特点:无状态,可扩展,支持移动设备,跨程序调用,安全
cookie和session的区别: 1.session是存储服务器端,cookie是存储在客户端,所以session的安全性比cookie高 2.session的信息是通过sessionid获取的,而sessionid是存放在会话cookie中

1|3jwt的构成

jwt就是一段字符串,有三段信息构成,将着三段信息用.连接到一起就构成了 jwt字符串, eg: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
第一部分称为头部,第二部分称为荷载,第三部分称为签证
1. jwt的头部(header)承载两部分信息: 声明类型:这里是jwt 声明加密的算法 通常直接使用 HMAC SHA256 公司信息等 2. 荷载(payload) 荷载就是放有效信息的地方,有效信息包含: 标准中注册的声明 公共的声明 私有的声明 3.签名(signature) 第一部分和第二部分通过秘钥+加密方式得到的 header payload secret
# base64编码和解码 编码: import base64 import json dic = {'user_id':1,'username':'jia'} dic_str = json.dumps(dic) # 把这个字符串使用base64编码 res = base64.b16encode(dic_str.encode('utf-8')) print(res) 解码: res = base64.b64decode('7B22757365725F6964223A20312C2022757365726E616D65223A20226A6961227D') print(res)

1|4drf-jwt快速使用

image

jwt:签发(登录接口) 认证(认证类)
#django+drf 平台开发jwt这套,有两个模块 -djangorestframework-jwt ---》一直可以用 -djangorestframework-simplejwt---》公司用的多---》希望你们试一下 -自己封装jwt签发和认证 下载: pip3.8 install djangorestframework-jwt -i https://mirro rs.aliyun.com/pypi/simple/ spyder
下载rest_framework_jwt: pip3.8 install djangorestframework-jwt -i https://mirro rs.aliyun.com/pypi/simple/ spyder 代码: from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ path('login',obtain_jwt_token) ]

image

image

1|5定制返回格式

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

image

image

1|6jwt的认证类

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

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/17107174.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示