drf——全局处理异常、接口文档、jwt介绍、based64编码与解码
全局异常处理原理
# 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理
{code:999,msg:'系统异常,请联系系统管理员'}
# 只要三大认证,视图类的方法出了异常,都会执行一个函数:
rest_framework.views import exception_handler
# drf只要出了异常就会执行 这是drf的配置文件中的
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'
# 但是源码是不能改的 我们可以自定义一个函数 配置一下 以后出了异常 执行我们自己的函数
"""
需要在项目的配置文件中配置上自己写的这个函数 字典的v是函数的路径
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'app01.excepitons.common_exception_handler',
}
"""
# 注意:exception_handler
"""
如果异常对象是drf的APIException的对象,就会返回Response
exception_handler只处理了drf的异常,其他的异常需要我们自己处理
如果异常对象不是drf的APIException对象,就会返回None
"""
# exception_handler源码:
def exception_handler(exc, context): # 如果有异常会走这
if isinstance(exc, exceptions.APIException): # 判断是否是APIException的对象 是就返回Response 不是返回None
if isinstance(exc.detail, (list, dict)):
data = exc.detail
else:
data = {'detail': exc.detail}
return Response(data, status=exc.status_code, headers=headers)
return None
# 补充 内置方法
isinstance() 判断一个对象是不是某个类的对象 isinstance(对象,类)
issubclass() 判断一个类,是不是另一个类的子类
全局异常处理代码
# 我们自己自定义的函数
def common_exception_handler(exc,context):
# 只要走到这里,一定出异常了,我们正常的项目要记录日志
res = exception_handler(exc,context)
# 两种可能:应该是Response对象,一个是None
if res:
if isinstance(res.data,dict)
# 如果res有值 说明是drf的异常,它处理了
detail = res.data.get('detail')
else:
detail = res.data
return Response({'code':999,'msg':detail})
else:
# 如果res没有值返回的是None 则说明是其他异常,它没有处理
# return Response({'code': 999, 'msg': '系统异常,请联系系统管理员'})
return Response({'code':100,'msg':str(exc)})
# 项目的配置文件
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'app01.excepitons.common_exception_handler',
}
接口文档
# 后端把接口写好后
登录接口
注册接口
查询所有图书带过滤接口
# 前端人员需要根据接口文档,进行前端开发
# 前后端需要做对接----》对接第一个东西就是这个接口文档---》前端照着接口文档开发
# 公司3个人,每个人开发了10个接口,3个人都要同时写接口文档
# 接口文档的编写形式
1.word,md编写,大家都可以操作,写完放在git上或者是公司的文档管理平台上
2.第三方的接口文档平台(收费)
https://www.showdoc.com.cn/
3.公司自己开发接口文档平台
4.公司使用开源的接口文档平台,搭建
-YAPI:百度开源的
-https://zhuanlan.zhihu.com/p/366025001 # 如何搭建
5.项目自动生成接口文档
5.1 coreapi
5.2 swagger
# 使用coreapi自动生成接口文档
使用步骤:
1. 安装:pip38 install coreapi
2.加一个路由
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('docs/',include_docs_urls(title='站点页面标题'))
]
3.在视图类上加注释
4.配置文件中配置
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
5.表模型或序列化类的字段上写 help_text--->会显示在接口文档的字段介绍上
6.访问地址:
http://127.0.0.1:8000/docs/
jwt介绍和原理
# https://www.cnblogs.com/liuqingzheng/p/16154439.html
# cookie,session,token发展历史
会话管理
cookie:客户端浏览器的键值对
session:服务端的键值对(djangosession表,内存中,文件,缓存数据库)
token:服务端生成的加密字符串,如果存在客户端浏览器上,就叫cookie
三部分:头,荷载,签名
签发:登录成功,签发
认证:认证类中认证
# jwt:Json web token (JWT),web方向的token认证
长得样子: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

base64编码和解码
# base64并不是一种加密反射,只是编码解码方式
# 字符串,可以转成base64编码格式:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
# eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 解码成base64
import json
import base64
d = {'user_id':1,'username':'lqz'}
d_str = json.dumps(d)
# print(d_str)
# 对字符串进行base64 编码
res = base64.b64encode(bytes(d_str,encoding='utf-8'))
print(res) # b'eyJ1c2VyX2lkIjogMSwgInVzZXJuYW1lIjogImxxeiJ9'
# 解码
res = base64.b64decode(res)
print(res)
# 括号内也可以直接放一串字符串 长度必须是4的倍数 长度不够时用=补齐
res = base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=')
print(res)
# base64的用途
"""
1.在互联网中 前后端数据交互使用base64编码
2.jwt 字符串使用base64编码
3.互联网中一些图片 使用base64编码
"""
drf——全局处理异常、接口文档、jwt介绍、based64编码与解码的更多相关文章
- Django框架之drf:9、接口文档,coreapi的使用,JWT原理、介绍、快速使用、定制、认证
目录 Django框架之drf 一.接口文档 二.CoreAPI文档生成器 1.使用方法 三.JWT 1.JWT原理及介绍 2.JWP快速使用 3.定制返回格式 4.JTW的认证类 Django框架之 ...
- rbac介绍、自动生成接口文档、jwt介绍与快速签发认证、jwt定制返回格式
今日内容概要 RBAC 自动生成接口文档 jwt介绍与快速使用 jwt定制返回格式 jwt源码分析 内容详细 1.RBAC(重要) # RBAC 是基于角色的访问控制(Role-Based Acces ...
- Spring Boot 集成 Swagger 构建接口文档
在应用开发过程中经常需要对其他应用或者客户端提供 RESTful API 接口,尤其是在版本快速迭代的开发过程中,修改接口的同时还需要同步修改对应的接口文档,这使我们总是做着重复的工作,并且如果忘记修 ...
- drf频率源码、自动生成接口文档、JWT
目录 一.drf频率源码分析 二.自动生成接口文档 1 安装依赖 2 设置接口文档访问路径 3 文档描述说明的定义位置 4 访问接口文档网页 三.JWT 1 JWT基本原理 1.1 header 1. ...
- day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档
目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...
- 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用
因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...
- DRF之接口文档以及Xadmin
1. 自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1.1. 安装依赖 REST ...
- drf框架接口文档
drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...
- spring boot:用swagger3生成接口文档,支持全局通用参数(swagger 3.0.0 / spring boot 2.3.2)
一,什么是swagger? 1, Swagger 是一个规范和完整的文档框架, 用于生成.描述.调用和可视化 RESTful 风格的 Web 服务文档 官方网站: https://swagger.i ...
- drf 生成接口文档
REST framework可以自动帮助我们生成接口文档.接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 REST framewrok生成接口文档 ...
随机推荐
- MySQL查询练习 (转载)
转载 @香草味的橙子 侵删 Evernote Export body, td { font-family: 微软雅黑; font-size: 10pt } mysql查询练习 新建一个查询用的数据库: ...
- 使用Net将HTML简历导出为PDF格式
现在有许多将HTML导出PDF的第三方包,这里介绍使用的是Select.HtmlToPdf.NetCore 使用Select.HtmlToPdf.NetCore 整体思路是将cshtml内容读出来,然 ...
- 最大流基础(Maximum Flow Basis)
1. 最大流问题定义 1.1 流网络(Flow network) Def. A flow network is a tuple \(G = (V, E, s, t, c)\): Digraph \(( ...
- 在ArcGIS Pro中对Revit的bim数据进行地理配准(平移、旋转等)
在ArcGIS Pro中,打开Revit的rvt格式数据,默认是没有坐标系,且位置会放置在原点位置(0,0),在实际使用过程中,需要对rvt数据进行地理配准,包括平移.旋转等操作将bim数据放置在正确 ...
- Linux 磁盘空间查看及清理
1. 查看磁盘空间 查看当前目录各文件夹大小 du -ah -x --max-depth=1 查看文件大小 ls -lh 查看系统空间占用 df -h 2. 磁盘空间清理 Linux清除文件内容 ca ...
- .net core基于HttpClient实现的网络请求库
Soda.Http 基于HttpClient封装的 Http 请求库.如果有什么好想法,可以提 Issue 或者 Pr.,如果想要使用,直接在nuget搜索Soda.Http即可. Github项目地 ...
- abc285G
ABC 285 G - Tatami Solution 网络流 网格图是一个天然二分图, 可以按 横纵坐标之和 的奇偶性将相邻两格分属于左部和右部. 记'?' 或 '2' 的格子为待匹配点, 记横纵坐 ...
- day96:flask:flask-migrate&flask-session&蓝图Blueprint&蓝图的运行机制&基于flask仿照django进行项目架构
目录 1.flask-migrate 2.flask-session 3.蓝图:Blueprint 4.蓝图的运行机制 5.基于flask仿照django进行项目架构 1.准备工作 2.加载配置文件 ...
- day33:进程锁&事件&进程队列&进程间共享数据
目录 1.锁:Lock 2.信号量:Semaphone 3.事件:Event 4.进程队列:Queue 5.生产者和消费者模型 6.JoinableQueue 7.Manager:进程之间共享数据 锁 ...
- golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理
golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...