接口文档

# 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. oracle 导出导入表 不到出指定表

    导出多个表 exp LSXYYSZHMRMS/******@PK99SERVICE file=d:\fuhcx.dmp  tables=(fhcxgxxx,fhcxjcxx,fhcxlbxx,fhcx ...

  2. 066_VFPage中Js Button与controller交互方式(一)

    这种方式经常被用来,在button中处理一些逻辑,做法是在detail 页面中加一个button,对应是jS执行调用invoke controller Define a webService meth ...

  3. React函数式组件值之useRef()和useImperativeHandle()

    一.useRef useRef共有两种用法,获取子组件的实例(只有类组件可用),在函数组件中的一个全局变量,不会因为重复 render 重复申明, 类似于类组件的 this.xxx. 1. useRe ...

  4. .net core layui折叠表格的应用。

    效果展示 头部的折叠,展开,搜索按钮 <div class="layui-fluid"> <div style="margin-top: 20px;&q ...

  5. mac使用expect登录跳板机后的机器

    两个文档 #!/usr/bin/expect -f #连接文件名字记录 set ip [lindex $argv 0] catch {spawn ssh 1.1.1.1}## ip地址换成自己的 ex ...

  6. home条 防止误碰

    某些界面需要隐藏home条,防止误触导致页面返回 - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEd ...

  7. Win10桌面点鼠标右键一直转圈的解决方法

    win10桌面右键菜单就一直转圈,无法调出桌面右键菜单,下面给大家分享一下怎么解决的问题,一起了解一下!            步骤阅读   工具/原料   win10 企业版 HT1902 方法/步 ...

  8. Linux的常用命令符标注

    1.who命令--显示目前登录系统的用户信息. 语法:who(选项)(参数)参数:查询的文件 常用选项:-h:显示各栏位的标题信息列. -w:显示用户的信息状态栏. -q:显示登陆入系统的账号名称和总 ...

  9. [部署日记]Android Studio在同步Gradle的时候提示Could not resolve com.android.tools.build:gradle:7.0.4

    一波未平一波又起,好家伙直呼好家伙. 问题来源: 在想好APP起什么名字,放哪里后,打开模拟器准备着手处理时发现, Gradle sync出问题了... "Build"窗口提示: ...

  10. Go语言格式化金额为3个一组隔开

    最近在Go语言项目上面遇到了一个金额相关的问题,想更加规范的将金额用逗号隔开3个分为一组,这样显示更专业一点,经过一番努力,找到这个下面这个插件,经过测试发现比较好用,特此分享出来. 第一步先下载一个 ...