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生成接口文档 ...
随机推荐
- 玩转Mybatis高级特性:让你的数据操作更上一层楼
目录 动态SQL 缓存机制 插件机制 自定义类型转换 总结 Mybatis高级特性能够帮助我们更加灵活地操作数据库,包括动态SQL.缓存机制.插件机制.自定义类型转换等.学习这些特性可以让我们更好地利 ...
- 【ACM算法竞赛日常训练】DAY1题解与分析
DAY1 共四题: 月月查华华的手机:https://ac.nowcoder.com/acm/problem/23053 Rinne Loves Edges:https://ac.nowcoder.c ...
- dark room - 2020 年苹果设计奖得主,一个足够强大的照片视频编辑器
2020年苹果设计奖得主 2015年App Store最佳应用 Darkroom 是一个高级照片和视频编辑器.它对业余摄影师来说很容易操作,但对专业摄影师来说足够强大. 下载 ➤ Darkroom 下 ...
- uniapp H5图片编辑器(安卓/iOS适用)
箭头绘制参考了:https://blog.csdn.net/qq_45939676/article/details/127425426 这位大佬的文章 gitee地址: https://gitee.c ...
- vue之条件渲染v-if
目录 说明 语法 示例 说明 "vue条件渲染指令包括v-if.v-else.v-else-if.v-show. 语法 v-if="条件1&&条件2" # ...
- [Git]解决GIT冲突问题:git pull failed
1 文由 花了很长时间一次性修改了项目的一大堆文件,准备最后git pull同步一下本地仓库代码,再一次性git commit,git push新代码的. but天不遂人愿,git pull时产生冲突 ...
- TS 导入导出那些事
前言 最近用 TypeScript 写 npm 包,各种模块.命名空间.全局定义等等扰得我睡不着觉. 我便苦心研究,总结了几个比较冷门的,国内貌似基本上找不到资料的导入导出用法,顺便在其中又插入一些不 ...
- 【谷粒商城】(二)SpringCloudAlibaba分布式组件
微服务 分布式组件 注册中心:每一个微服务上线都应该注册到注册中心.这样做的好处在于方便微服务之间的相互调用,比如订单服务想要调用商品服务,就可以通过注册中心查看有哪几台主机的商品服务进行了注册,然后 ...
- chatgpt接口开发笔记1:completions接口
chatgpt接口开发笔记1:completions接口 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.t ...
- [ [Ynoi2013] 无力回天 NOI2017 ] 解题报告
[Ynoi2013] 无力回天 NOI2017 首先看到异或,想到能维护异或的东西就那几样(线性基/01trie/数位 dp/FWT),再看到求选任意个数后的异或最大值,线性基无疑了. 这时再看还要维 ...