Django+DRF 实战:从异常捕获到自定义错误信息
一、DRF 异常
介绍
APIException 类是 DRF 异常的基类。通过继承APIException,DRF 提供了多种内置异常类。
ParseError:当请求解析失败时抛出。AuthenticationFailed:认证失败时会出现这个异常。NotAuthenticated:未认证的用户访问需要权限的资源时触发。PermissionDenied:权限被拒绝时抛出该异常。NotFound:请求的资源不存在时出现此异常。MethodNotAllowed:使用不支持的 HTTP 方法时触发。NotAcceptable:无法满足请求的Accept标头时抛出。Throttled:请求被限流时会出现这个异常。ValidationError:数据验证失败时触发。
通过继承 APIException 类,可以实现自定义(业务)异常。并根据业务需求在视图层返回。但这种方式比较麻烦,不太推荐。
from rest_framework.exceptions import APIException
class ServiceUnavailable(APIException):
status_code = 503
default_detail = '服务暂不可用,请稍后重试。'
default_code = 'service_unavailable'
ValidationError 异常
rest_framework.exceptions.ValidationError异常,一般用于序列化器,在数据验证失败时自动触发。
- 语法:
ValidationError(detail=None, code=None) - 属性
status_code:默认为status.HTTP_400_BAD_REQUEST - 属性
detail:默认为_('Invalid input.')。支持多种格式的错误信息,包括:- 字符串:会被转换为包含该字符串的列表。
- 列表:代表多个错误信息。
- 字典:指定字段级错误,键为字段名,值为对应字段的错误信息。
手动触发ValidationError异常示例
from rest_framework import serializers
raise serializers.ValidationError('This field must be an integer value.')
# 或
raise serializers.ValidationError({'name': 'Please enter a valid name.'})
二、ValidationError 异常实战
实战场景
对请求参数校验,并在不符合要求时返回自定义错误信息。例如:在用户注册的时候,对用户名、昵称和密码进行校验,校验失败时返回自定义的错误信息。
定义序列化器
定义用户注册序列化器,用户请求参数校验失败时,返回自定义错误信息
- 校验用户名由字母数字组成、最小长度和最大长度
- 校验昵称最小长度和最大长度
- 校对密码最小长度和最大长度

定义视图
定义用户注册视图,调用序列化器的is_valid()方法,对用户请求参数校验

实战效果
用户名校验失败:用户名中含有下划线

昵称校验失败:昵称太短

密码校验失败:密码太长

您正在阅读的是《Django从入门到实战》专栏!关注不迷路~
Django+DRF 实战:从异常捕获到自定义错误信息的更多相关文章
- Java异常封装(自定义错误信息和描述)
一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...
- SpringBoot自定义错误信息,SpringBoot适配Ajax请求
SpringBoot自定义错误信息,SpringBoot自定义异常处理类, SpringBoot异常结果处理适配页面及Ajax请求, SpringBoot适配Ajax请求 ============== ...
- 自定义错误信息并写入到Elmah
在ap.net Web项目中一直使用Elmah进行日志记录, 但一直有一个问题困扰我很久,那就是我如何自己生成一个错误并记录到Elmah里去. 你知道有时你需要在项目中生成一个错误用于一些特殊的需求 ...
- 自定义 ocelot 中间件输出自定义错误信息
自定义 ocelot 中间件输出自定义错误信息 Intro ocelot 中默认的 Response 中间件在出错的时候只会设置 StatusCode 没有具体的信息,想要展示自己定义的错误信息的时候 ...
- C# 通过扩展WebBrowser捕获网络连接错误信息
想捕获WebBrowser连接指定网站过程中发生的错误信息,包括网络无法连接.404找不到网页等等错误!经过网上的搜集,找到了以下解决方案,该解决方案不会在网站连接前发出多余的测试请求. 向Webbr ...
- jquery.validate使用 - 自定义错误信息
自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...
- django项目部署服务器后无法发送邮箱 错误信息:Connection unexpectedly closed
使用配置: python 3.7 + django 2.2.1 发送邮件模块 : from django.core.mail import send_mail 服务器:Centos7 阿里云轻 ...
- jQuery.validate.js 自定义错误信息
var validate = $("form").validate({....})validate.showError({"username":"us ...
- jQuery Validate自定义错误信息,自定义方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题
我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默 ...
随机推荐
- AspNetCore MVC 跨域
通过XMLHttpRequest或者ajax去请求一个AspNetCore API接口服务时,Firefox提示我 已拦截跨源请求:同源策略禁止读取位于 http://localhost:33694/ ...
- IOC容器启动及Bean生成流程
目录 一.容器启动 IOC启动流程 重点 二.扫描并注册BeanDefination 加载并过滤资源 注册BeanDefination 三.BeanFactory后置处理 四.注册Bean后置处理器 ...
- HashMap 批量添加
需要初始化一个常量HashMap,并希望在一行语句中完成.避免像这样的事情: hashMap.put("One", new Integer(1)); // adding value ...
- jmeter结果断言的几种方法
这篇文章里,我们已经知道了怎样实用json断言(https://www.cnblogs.com/becks/p/14951725.html) 接下来还有几种断言,一一介绍 一.响应断言,这种断言的逻辑 ...
- Fastjson命令执行漏洞复现2(fastjson <=1.2.47)
一.搭建环境: 第一种:Docker一键拉取环境 htttps://github.com/vulhub/vulhub/tree/master/fastjson/1.2.47-rce 第二种:tomac ...
- 漏洞预警 | 明源地产ERP SQL注入漏洞
0x00 漏洞编号 暂无 0x01 危险等级 高危 0x02 漏洞概述 明源地产ERP是一款专为房地产行业设计的企业资源计划管理系统,致力于为房地产开发企业提供全面的管理解决方案. 0x03 漏洞详情 ...
- kubernetes service 原理精讲
--- # 介绍 Kubernetes Service 用于流量的负载均衡和反向代理,其通过 kube-proxy 组件实现.从服务的角度来看,kube-controller-manager 实现了服 ...
- eclipse修改默认的工作空间路径
搜索Workspaces -->勾选Prompt for workspace on startup
- Special Binary String——LeetCode进阶路
原题链接https://leetcode.com/problems/special-binary-string/ 题目描述 Special binary strings are binary stri ...
- 基于Scikit-learn与Flask的医疗AI糖尿病预测系统开发实战
引言 在精准医疗时代,人工智能技术正在重塑临床决策流程.本文将深入解析如何基于MIMIC-III医疗大数据集,使用Python生态构建符合医疗AI开发规范的糖尿病预测系统.项目涵盖从数据治理到模型部署 ...