Django rest_framework使用自定义异常
完整代码
https://gitee.com/mom925/django-system
在settings.py中配置
REST_FRAMEWORK = {
"EXCEPTION_HANDLER": "utils.exception.CustomExceptionHandler", # 自定义的异常处理
}
exception.py文件
import logging
import traceback from django.http import Http404
from rest_framework.exceptions import AuthenticationFailed, APIException, PermissionDenied, ValidationError, \
MethodNotAllowed, Throttled, NotAuthenticated
from rest_framework.views import exception_handler, set_rollback from utils.MyResponse import ErrorResponse logger = logging.getLogger(__name__) def CustomExceptionHandler(ex, context):
"""
统一异常拦截处理
:param ex:
:param context:
:return:
"""
# print(type(ex))
msg = ""
code = 400
# 调用默认的异常处理函数
response = exception_handler(ex, context)
# print(type(ex), ex)
# print(response)
# print(response.data)
if isinstance(ex, AuthenticationFailed) or isinstance(ex, NotAuthenticated):
# 如果是身份验证错误
msg = '身份验证失败'
code = 401
if response.data.get('detail').code == 'no_active_account':
code = 400
msg = '账号或密码错误' elif isinstance(ex, Http404):
code = 400
msg = "接口地址不正确"
elif isinstance(ex, ValidationError):
# msg = str(ex)
msg = '请提交正确字段'
code = 400
if isinstance(response.data, dict):
if response.data.get('username'):
if response.data.get('username')[0].code == 'unique':
msg = '用户已存在'
else:
keys = list(response.data.keys())
s = ','.join(keys)
msg = '请提交正确' + s
elif isinstance(response.data, list):
msg = response.data[0] elif isinstance(ex, MethodNotAllowed):
# msg = str(ex)
msg = '没有该请求方法'
code = 400
elif isinstance(ex, Throttled):
msg = '请求太快了,请稍后再试'
code = 400
elif isinstance(ex, APIException):
set_rollback()
# msg = ex.detail
if isinstance(ex, PermissionDenied):
msg = f'您没有权限'
# msg = f'您没有权限 ({context["request"].method}: {context["request"].path})'
else:
msg = '错误'
# 手动抛异常时
if response.data.get('detail').code == 'manually':
msg = response.data.get('detail')
else:
logger.exception(traceback.format_exc())
else:
logger.exception(traceback.format_exc())
msg = '错误'
code = 400
return ErrorResponse(msg=msg, code=code)
Django rest_framework使用自定义异常的更多相关文章
- Django rest_framework 实用技巧
前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...
- Python之Django rest_Framework框架源码分析
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...
- Python之Django rest_Framework(2)
实例化: v1 = ["view.xxx.path.Role","view.xxx.path.Group",] 可以循环,循环出来的每一个不能实例化 如果把v1 ...
- 七、django rest_framework源码之视图
1 绪言 当大家看大这篇博文的时候,应该对Django rest_framework中的CBV有所了解了,大致来说就是通过定义类来继承APIView类,并在类中定义get.post.put.delet ...
- 五、django rest_framework源码之版本控制剖析
1 绪论 Djangorest_framework的版本控制允许用户更改不同客户端之间的行为,且提供了许多不同的版本控制方案.版本控制由传入的客户端请求确定,可以基于请求URL,也可以基于请求标头. ...
- 四、django rest_framework源码之频率控制剖析
1 绪言 权限判定之后的下一个环节是访问频率控制,本篇我们分析访问频率控制部分源码. 2 源码分析 访问频率控制在dispatch方法中的initial方法调用check_throttles方法开始. ...
- 二、django rest_framework源码之认证流程剖析
1 绪言 上一篇中讲了django rest_framework总体流程,整个流程中最关键的一步就是执行dispatch方法.在dispatch方法中,在调用了一个initial方法,所有的认证.权限 ...
- django rest_framework中将json输出字符强制为utf-8编码
最近在和日本外包合作开发JIRA对接发布系统的版本单时, 遇到这个问题. 就是我们这边的输出浏览器显示为中文,而到了JIRA端就出现乱码. 查了文档,原来django rest_framework的默 ...
- python之Django rest_framework总结
一.rest api a.api就是接口 如: - http://www.oldboyedu.com/get_user/ - http://www. ...
- CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...
随机推荐
- RT-Thread 中 minIni 组件包无法添加的解决方法
事件 今天在 Env 下添加 minIni 包的时候出现了无法将其添加到工程的情况.借此机会来记录一下如何解决该类问题. 如果你想快速排错可以直接到 [2.minIni 组件出现的问题]查看. 一.准 ...
- CatCatCat
拿到题目没有思路,查看了题解 附件 放到kali中用string找flag,得到一个密钥,可以用来下面的解密 打开我养了-- 发现里面以U2F开头,结合txt名称"我养了一只叫兔子的91岁的 ...
- Seaurl-分享一个云上网址收藏网站
前言 最近网上发现一个强大的网址收藏网站,点击这里打开,分享给大家,希望大家会喜欢. 网址空间 "网址空间"是一个专业的在线平台,它允许用户分享他们在日常生活和工作中频繁访问的网站 ...
- 【luogu题解】P5461 赦免战俘
一.题目 现有 \(2^n\times2^n\ (n≤10)\) 名作弊者站成一个正方形方阵等候 kkksc03 的发落.kkksc03 决定赦免一些作弊者.他将正方形矩阵均分为 4 个更小的正方形矩 ...
- [CSAPP、APUE、UNP]文件、IO
<鸟哥的Linux私房菜:基础学习篇(第四版)> 第5章 Linux的文件权限与目录配置 第6章 LInux文件与目录管理(正在进行) <CSAPP> 第10章 系统级IO 1 ...
- 基于WPSOffice+Pywpsrpc构建Docker镜像,实现文档转换和在线预览服务
背景 产品功能需要实现标准文档的在线预览功能,由于DOC文档没办法直接通过浏览器打开预览,需要提前转换为PDF文档或者HTML页面. 经过测试发现DOC转为HTML页面后文件提交较大,而且生成的静态资 ...
- Python:单元测试框架unittest
1.什么是单元测试 测试函数/方法或者一段代码,用于检验被测代码的一个很小的.很明确的功能是否正确,通常是开发做. 在Python中的单元测试框架有Unittest和Pytest,现在总结Unitte ...
- Excel对比两张表的某一列,匹配上则进行数据copy
VLOOKUP(参数1,参数2,参数3,参数4) 参数1: 查找值 参数2:指定查找数据源的范围 参数3:返回查找区域的第几列数据 参数4:精确查找输入参数"0"or"f ...
- k8s~ingress_service_endpoint_pod四壮士
在Kubernetes中,Service和Endpoints是两个重要的概念,它们之间存在着密切的关系. Service:Service是Kubernetes中用于定义一组Pod的访问方式的抽象.通过 ...
- TensorFlow C++ 初始化 Tensor 内存 到GPU 内存
最近使用TensorFlow C++版本实现神经网络的部署,我通过GPU 处理得到网络的输入值,因此输入值在GPU内存上保存, TF 输入tensor 的调用语句为 Tensor inputTenso ...