全局异常处理原理

# 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理
{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编码与解码的更多相关文章

  1. Django框架之drf:9、接口文档,coreapi的使用,JWT原理、介绍、快速使用、定制、认证

    目录 Django框架之drf 一.接口文档 二.CoreAPI文档生成器 1.使用方法 三.JWT 1.JWT原理及介绍 2.JWP快速使用 3.定制返回格式 4.JTW的认证类 Django框架之 ...

  2. rbac介绍、自动生成接口文档、jwt介绍与快速签发认证、jwt定制返回格式

    今日内容概要 RBAC 自动生成接口文档 jwt介绍与快速使用 jwt定制返回格式 jwt源码分析 内容详细 1.RBAC(重要) # RBAC 是基于角色的访问控制(Role-Based Acces ...

  3. Spring Boot 集成 Swagger 构建接口文档

    在应用开发过程中经常需要对其他应用或者客户端提供 RESTful API 接口,尤其是在版本快速迭代的开发过程中,修改接口的同时还需要同步修改对应的接口文档,这使我们总是做着重复的工作,并且如果忘记修 ...

  4. drf频率源码、自动生成接口文档、JWT

    目录 一.drf频率源码分析 二.自动生成接口文档 1 安装依赖 2 设置接口文档访问路径 3 文档描述说明的定义位置 4 访问接口文档网页 三.JWT 1 JWT基本原理 1.1 header 1. ...

  5. day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档

    目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...

  6. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  7. DRF之接口文档以及Xadmin

    1. 自动生成接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1.1. 安装依赖 REST ...

  8. drf框架接口文档

    drf框架接口文档 REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 pip insta ...

  9. spring boot:用swagger3生成接口文档,支持全局通用参数(swagger 3.0.0 / spring boot 2.3.2)

    一,什么是swagger? 1,  Swagger 是一个规范和完整的文档框架, 用于生成.描述.调用和可视化 RESTful 风格的 Web 服务文档 官方网站: https://swagger.i ...

  10. drf 生成接口文档

    REST framework可以自动帮助我们生成接口文档.接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 REST framewrok生成接口文档 ...

随机推荐

  1. MySQL查询练习 (转载)

    转载 @香草味的橙子 侵删 Evernote Export body, td { font-family: 微软雅黑; font-size: 10pt } mysql查询练习 新建一个查询用的数据库: ...

  2. 使用Net将HTML简历导出为PDF格式

    现在有许多将HTML导出PDF的第三方包,这里介绍使用的是Select.HtmlToPdf.NetCore 使用Select.HtmlToPdf.NetCore 整体思路是将cshtml内容读出来,然 ...

  3. 最大流基础(Maximum Flow Basis)

    1. 最大流问题定义 1.1 流网络(Flow network) Def. A flow network is a tuple \(G = (V, E, s, t, c)\): Digraph \(( ...

  4. 在ArcGIS Pro中对Revit的bim数据进行地理配准(平移、旋转等)

    在ArcGIS Pro中,打开Revit的rvt格式数据,默认是没有坐标系,且位置会放置在原点位置(0,0),在实际使用过程中,需要对rvt数据进行地理配准,包括平移.旋转等操作将bim数据放置在正确 ...

  5. Linux 磁盘空间查看及清理

    1. 查看磁盘空间 查看当前目录各文件夹大小 du -ah -x --max-depth=1 查看文件大小 ls -lh 查看系统空间占用 df -h 2. 磁盘空间清理 Linux清除文件内容 ca ...

  6. .net core基于HttpClient实现的网络请求库

    Soda.Http 基于HttpClient封装的 Http 请求库.如果有什么好想法,可以提 Issue 或者 Pr.,如果想要使用,直接在nuget搜索Soda.Http即可. Github项目地 ...

  7. abc285G

    ABC 285 G - Tatami Solution 网络流 网格图是一个天然二分图, 可以按 横纵坐标之和 的奇偶性将相邻两格分属于左部和右部. 记'?' 或 '2' 的格子为待匹配点, 记横纵坐 ...

  8. day96:flask:flask-migrate&flask-session&蓝图Blueprint&蓝图的运行机制&基于flask仿照django进行项目架构

    目录 1.flask-migrate 2.flask-session 3.蓝图:Blueprint 4.蓝图的运行机制 5.基于flask仿照django进行项目架构 1.准备工作 2.加载配置文件 ...

  9. day33:进程锁&事件&进程队列&进程间共享数据

    目录 1.锁:Lock 2.信号量:Semaphone 3.事件:Event 4.进程队列:Queue 5.生产者和消费者模型 6.JoinableQueue 7.Manager:进程之间共享数据 锁 ...

  10. golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理

    golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...