接口文档

# 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. windows下解决getAddressInfo Failed的一种办法

    从九点到现在,解决完这个问题就四点了,其实不难,只是第一次遇到和我太菜. 就是管理员身份打开命令行然后输入ipconfig /flushdns,作用是刷新dns解析缓存,这还不够,如果只做这一步,重启 ...

  2. Mac 压缩软件Keka

    ​ mac 的压缩软件Keka,相对比较好用的一款压缩软件 Keka - the macOS file archiver 点击下载 安装就好. ​编辑 支持可创建的压缩文件格式,和可解压缩的文件格式列 ...

  3. fastdfs虚拟机单机版搭建

    说明:github搭建步骤:https://github.com/happyfish100/fastdfs/wiki#trackermkdir /home/dfs #创建数据存储目录 cd /usr/ ...

  4. 在k8s中使用harbor仓库

    在k8s中使用harbor仓库 修改每个node上的docker认证仓库 将每个node节点上的docker同样需要配置可信任仓库 vi /etc/docker/daemon.json #修改为 {& ...

  5. 判断python socket服务端有没有关闭的方法

    通过 getattr(socket, '_closed') 的返回值可以判断服务端的运行状态. True 是关闭状态,False 是运行中. import socket ip = 'localhost ...

  6. net Core做一个webApi的简单实例

    用NetCore 和Dapper 和mySql做一个简单的实例, 一准备工作 1:VS2017+windos系统,也可以用其他的操作系统和工具 2:一台Cenetos的虚拟机或者虚拟机 二:开始 1: ...

  7. yarn 更新依赖包

    yarn upgrade --latest 其他的以后再记录.

  8. Day20:update功能的实现

    今日完成的任务: 1.将最初设想的消息界面删除,删去message和chat等无参数跳转界面,并在物品详情中增加[联系方式]一栏供大家线下交易使用. 最终完成界面如下 2.实现本个小程序最后一个功能- ...

  9. docker中搭建Ubuntu:16.04+python3.6+django环境

    用vim 新建一个Dockerfile和sources.list文件,在里面添加如下内容. #sources.list deb http://mirrors.163.com/ubuntu/ xenia ...

  10. python快速制作可视化报表