全局异常处理原理

# 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理
{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. 声网传输层协议 AUT 的总结与展望丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网大后端传输协议负责人 夏天. 针对实时互动应用对网络传输带来的新需求和新挑战,声网通过将实时互动中的应用层业务需求与传输策略的分层和解耦,于 ...

  2. 在不使用SQL过程化编程的情况下,实现一个条件结构【SQL149 根据指定记录是否存在输出不同情况】

    题目地址 https://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b 思路 加了3列标记位,来达成目的.不直观而且占用内存,但 ...

  3. Django-5

    Django-5 1.Coookie 1.1 什么是cookie Cookie是储存在浏览器端的一小段文本数据(键值对). 被广泛用于在网站之间传输信息, 当您访问一个网站时,它会将一个Cookie发 ...

  4. 集合-ArrayList 源码分析

    1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...

  5. EF Core 使用Azure App Service中的In-App MySQL服务

    Azure App Service 提供了一个应用内的MySQL,可以供测试.开发使用. 前提条件是需要使用Windows的操作系统. 创建完App Server 之后,只需要在设置下开启 MySQL ...

  6. LeeCode 动态规划(四)

    LeeCode 动态规划(四) LeeCode 198:打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系 ...

  7. 【SpringCloud】(一)分布式理论

    分布式架构理论 方法远程调用 各个模块运行于不同的tomcat,模块之间通过网络进行调用. 远程调用的技术演进 1 WebService 解决应用程序之间的跨平台访问问题,基于SOAP/WSDL协议, ...

  8. SpringBoot入门(二):Controller的使用

    Controller中注解的使用:   @Controller   ●该注解用来响应页面,必须配合模板来使用   @RestController ●该注解可以直接响应字符串,返回的类型为JSON格式 ...

  9. Redis 报”OutOfDirectMemoryError“(堆外内存溢出)

    Redis 报错"OutOfDirectMemoryError(堆外内存溢出) "问题如下: 一.报错信息: 使用 Redis 的业务接口 ,产生 OutOfDirectMemor ...

  10. C# 从0到实战 变量的定义与使用

    变量的定义 变量本质是一种内存的占位符,使得我们可以轻松操作计算机.C#的变量声明格式是: 类型 名称 = 值: 1 //.... 2 3 int val = 0; //定义并赋值 4 5 Conso ...