drf从入门到飞升仙界 09
接口文档
# 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的更多相关文章
- Docker从入门到飞升:基础配置安装
导读 Docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率.其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付资源,大大提高了工作效率.几乎所有的大企 ...
- 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 ...
- Linux性能优化从入门到实战:09 内存篇:Buffer和Cache
Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储. 避免跟文中的"缓存"一词混淆,而文中的"缓存",则通指内存中的临时存储 ...
- Python学习从入门到放弃?我不允许!!!
嗨,大家好 这里是汐仔 很多人都说学习python学习python,打开书本,三分钟,从入门到放弃. 这怎么可以!!!大家能选择python的原因可能是看它既简单,好入门,现在俨然是语言中的一匹黑马. ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- pythonのsqlalchemy多对多关系
现在来设计一个能描述“图书”与“作者”的关系的表结构,需求是 一本书可以有好几个作者一起出版 一个作者可以写好几本书 #!/usr/bin/env python from sqlalchemy imp ...
- 转载-JavaWeb学习总结
JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件 孤傲苍狼 2015-01-12 23:51 阅读:13407 评论:20 JavaWeb学习总结(五十二)——使用 ...
- Java web学习总结
javaweb学习总结(十四)——JSP原理 孤傲苍狼 2014-07-24 09:38 阅读:46603 评论:37 JavaWeb学习总结(十三)——使用Session防止表单重复提交 孤 ...
- CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建
Android开发使用控件入门--环境搭建 2014-12-24 09:57 14人阅读 评论(0) 收藏 编辑 删除 CAD控件.CAD三维控件,手机 ...
- Jekyll 解决Jekyll server本地预览文章not found的问题
layout: post tags: [Jekyll] comments: true 执行Jekyll本地浏览器预览指令 bundle exec jekyll serve 进入浏览器输入127.0.0 ...
随机推荐
- 关于paddleocr2.6 布局分析的踩坑总结(一)
8月24日paddleocr发布了2.6.0,之前使用过2.5版本的布局分析,整体比较好用.近期就尝试了一下paddleocr的新版本,记录一下尝鲜经历.2.6版本的公告中指出,布局分析模型缩小了95 ...
- Object.defineProperty(定义试添加json对象的属性)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Cinder 对接本地LVM存储
系统安装lvm2 yum install lvm2 1.创建 loop 设备 dd if=/dev/zero of=volume_test bs=51200 count=1M 2.挂载loop设备 l ...
- 面试题 --MySQL事务
3.1 说一说你对数据库事务的了解 事务可由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成.在事务中的操作,要么都执行修改,要么都不执行,这就是事务的目的,也是事务模型区别于文件系统的 ...
- docker下载java镜像,执行xxx.jar文件
docker pull java:8u111
- PS设计非常漂亮酷炫的金色字体效果
方法/步骤 1.在PS里面新建一个黑色背景 2.在图层上 写上比较粗一点的字. 3.鼠标右击图层,选择混合模式,进行调整. 选择颜色叠加,注意颜色是深黄色. 4.转移到混合模式里面的渐变叠加,渐变的颜 ...
- 关于Java中数组的简单使用
关于java中数组的简单使用--继java环境配置后的第二篇学习笔记 近期在学习Java的过程中学到了数组的部分,至于为什么我会到数组才来写这个,主要是数组这一章节的内容感觉还是与之前学的C里面的数组 ...
- OS-lab4
OS-lab4 系统调用 系统调用的流程 按照上述的流程逐个分析. user/syscall_lib.c 这个文件位于user文件夹下,也就是用户程序可以调用的函数,相当于操作系统提供给用户程序的一些 ...
- webpack 5 配置babel-loader babel7
1.安装Balel目的: 在webpack中 默认只能处理部分 ES6的新语法,一些更高级的ES6或ES7的语法,webpack是处理不了的这个时候就需要借助第三方的loader 来帮助webpack ...
- reduce对数组及数组对象的常见操作
语法: array.reduce(function(prev, currentValue, currentIndex, arr), initialValue)prev: 初始值,或者是计算结束后的返回 ...