接口文档

# 1.前后端分离
- 后端:写接口
- 前端:根据接口写app,小程序,pc端 # 2.作为后端开发
- 我们应该清楚:
---> /api/v1/login/
---> 登录接口使用post请求访问
---> username,password 编码格式应该是json
---> 返回的格式 {code:100,msg:登录成功}、
---> 后端人员,接口写完后一定要写接口文档 # 3.接口文档的编写
- 1.使用word,md编写接口文档
- 2.使用第三方平台,编写我们的接口文档【有免费,也有收费】
---> https://www.showdoc.com.cn/item/index
- 3.公司自己使用第三方开源搭建的【Yapi,也可自行搭建】
---> https://zhuanlan.zhihu.com/p/366025001
- 4.使用drf编写的接口,可以自动生成接口文档
--->1.swagger : drf-yasg【官方推荐使用,为drf分支】 Topics-->D..your API
--->2.coreapi # 4.使用coreapi自动生成接口文档步骤
- 1.安装
pip install coreapi
- 2.配置路由
from rest_framework.documentation import include_docs_urls
urlpatterns = [
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 # 5.接口文档需要有的东西
- 1.描述
- 2.地址
- 3.请求方式
- 4.请求编码格式
- 5.请求数据详解(必填,类型)
- 6.返回格式案例
- 7.返回数据字段解释
- 8.错误码

jwt介绍和原理

JWT使用流程

# cookie,session,token的发展史
- cookie+session认证时期
- token认证时期
# Json web Token
- web方向Token的方式
# jwt开发的重点
- 登录接口 ---> 签发token
- 认证类 ---> jwt认证
# 1.JWT的构成:
- 1.三部分,各部分之间用 . 分割
"""
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
"""
--> 头: header
- 声明类型:这是jwt
- 声明这是加密的算法:通常直接使用 HMAC SHA256
- 公司信息
--> 荷载:payload
- 存放有效信息的地方
- 过期时间
- 签发时间
- 用户I
- 用户名字
--> 签名:signature
- 第一部分和第二部分通过密钥+加密方式得到的
- 2.base64编码使用
import base64
import json dic = {'user_id':1,'username':"lqz"}
dic_str = json.dumps(dic)
# 编码
res = base64.b64encode(dic_str.encode('utf-8'))
print(res)
# 解码
# base64编码后,字符长度一定是4的倍数,如果不是,则使用=补齐
res = base64.b64decode('eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogImxxeiJ9')
print(res) # 2.base64应用场景
- 1.jwt 使用了base64
- 2.网络中传输数据,也会经常使用 base64编码
- 3.网络传输中,有的图片使用base64编码 # 3.base64传输图片
s='编码后的图片编码'
res=base64.b64decode(s)
with open('a.png','wb') as f:
f.write(res)

drf-jwt快速使用

# django+drf 平台开发jwt
这套有两个模块:
- 1.djangorestframework-jwt ---> 一直可以用,不再更新
- 2.djangorestframework-simplejwt ---> 公司用的多
- 3.自己封装jwt签发和认证 # 使用步骤
- 1.安装
pip install .....
- 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,json格式

定制登录返回格式

# 在工作中,如果是基于auth的user表签发的token,就可以不自己写,但是登录接口返回的格式,只有token,不符合公司规范

# 1.使用Django auth的User表自动签发
- 1.配置setting.py
import datetime
JWT_AUTH = {
# 自定义认证结果:见下方序列化user和自定义response
# 如果不自定义,返回的格式是固定的,只有token字段
'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler',
}
- 2.写个函数:jwt_response_payload_handler #utils.py
from users.ser import UserModelSerializers
def jwt_response_payload_handler(token, user=None,
request=None):
return {
'code': 100,
'msg' : '登录成功',
'token': token,
'username': user.username
}
}
- 3.使用postman测试就可以看到返回的格式了

jwt的认证类

# 以后接口要登录后才能访问的使用
- 1.在视图类上加一个认证类,一个权限类
class BookView(ViewSetMixin, RetrieveAPIView):
......
# 使用drf-jwt提供的认证类,我们觉得加了他就有登录认证了
# 必须要配合一个权限类,drf提供的权限类
authentication_classes = [JSONWebTokenAuthentication]
permission_classes = [IsAuthenticated] # 登录用户有权限,不登录用户没权限
- 2.postman测试
-请求头中key值叫Authorization
-请求头的value值是jwt【有效的token值】

drf从入门到飞升仙界 09的更多相关文章

  1. Docker从入门到飞升:基础配置安装

    导读 Docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率.其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率.几乎所有的大企 ...

  2. UVA 674 (入门DP, 14.07.09)

     Coin Change  Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We ...

  3. Linux性能优化从入门到实战:09 内存篇:Buffer和Cache

      Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储.   避免跟文中的"缓存"一词混淆,而文中的"缓存",则通指内存中的临时存储 ...

  4. Python学习从入门到放弃?我不允许!!!

    嗨,大家好 这里是汐仔 很多人都说学习python学习python,打开书本,三分钟,从入门到放弃. 这怎么可以!!!大家能选择python的原因可能是看它既简单,好入门,现在俨然是语言中的一匹黑马. ...

  5. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  6. pythonのsqlalchemy多对多关系

    现在来设计一个能描述“图书”与“作者”的关系的表结构,需求是 一本书可以有好几个作者一起出版 一个作者可以写好几本书 #!/usr/bin/env python from sqlalchemy imp ...

  7. 转载-JavaWeb学习总结

    JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件 孤傲苍狼 2015-01-12 23:51 阅读:13407 评论:20     JavaWeb学习总结(五十二)——使用 ...

  8. Java web学习总结

    javaweb学习总结(十四)——JSP原理 孤傲苍狼 2014-07-24 09:38 阅读:46603 评论:37     JavaWeb学习总结(十三)——使用Session防止表单重复提交 孤 ...

  9. CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

    Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机 ...

  10. Jekyll 解决Jekyll server本地预览文章not found的问题

    layout: post tags: [Jekyll] comments: true 执行Jekyll本地浏览器预览指令 bundle exec jekyll serve 进入浏览器输入127.0.0 ...

随机推荐

  1. API 文档

    API 文档 Java类的组织形式 使用API查找方法: 包 -> 类 -> 方法 直接检索:Math

  2. Nginx 虚拟主机中配置 server_name ⼀个server块中配置多个站点 ⼀个站点配置多个⼆级域名

    ⼀个server块中配置多个站点 server { listen 80; server_name ~^(www.)?(.+)$; index index.php index.html; root /h ...

  3. java 实现Excel导入导出功能

    本文记录 首先需要准备一个导入模板的实体类 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn ...

  4. 错误 : 资产文件“\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。

    原因是项目升级了目标框架netcoreapp2.1但是发布配置文件上的目标框架配置项没有更改导致发布错误 将此处修改成需要的版本即可.例如:<TargetFramework>netcore ...

  5. CentOS 7.9 环境下部署 Nginx 服务

    sudo setenforce Permissive sudo vi /etc/selinux/config SELINUX=permissive sudo systemctl stop firewa ...

  6. CentOS下下查看硬盘型号、大小等信息(含Raid)

    一.普通模式(该机硬盘没有做磁盘阵列) 1.fdisk -l 查看你的硬盘编号,如sda,sdb 等 2.smartctl --all /dev/sda [html] view plain copy ...

  7. vue过滤出字符串中的汉字,match加正则

    vue过滤出字符串中的汉字,match加正则 str="23申迪MTN001(102380026)";str.match(/[\u4e00-\u9fa5]/g).join(&quo ...

  8. 【实验】VUE依赖版本,遇到就看这里

    https://www.cnblogs.com/luomanman/p/15435422.html

  9. 使用 PSAPI 库枚举进程 EnumProcesses()函数

    使用 PSAPI 库枚举进程 在 Windows NT 中,创建进程列表使用 PSAPI 函数,这些函数在 PSAPI.DLL 中.这个文件是随 Platform SDK 一起分发的: 使用这个库所需 ...

  10. Win11 win10系统分区时出现defrag事件怎么解决?

    Win11系统分区时出现defrag事件怎么解决?最近有用户反映这个问题,在重新整理磁盘分区的时候,遇到出现了defrag事件,不知道怎么解决,针对这一问题,本篇带来了详细的Win11系统分区时出现d ...