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 中发生了异常,则不能显示自定义错误页面,而是返回默 ...
随机推荐
- 离线版nRF Connect for Desktop安装方法
首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...
- WgelCTF打靶笔记(2)
参考视频:https://www.bilibili.com/video/BV1itwgeHEEk/?spm_id_from=333.1387.upload.video_card.click&v ...
- DevOps常用工具网址
Linux基础和命令: shell语法查询: http://www.linux6.comhttps://www.tutorialspoint.com/linux_admin/index.htm 正则表 ...
- soapUI接口关联教程
1.新建项目结构 步骤如下: 打开soapUI Pro,新建工作空间(点击File-New Workspace) 选中Test右键点击New Project 选中AlloTest右键点击New Tes ...
- Python3循环结构(二) while循环
Python3 while循环 当循环次数无界时通常会使用while循环. 1.使用while循环输出九九乘法表 i=1 while i < 10: j = 1 while j < i + ...
- 【记录】OJ|区间DP|石子合并(环形)
1. 题干 描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将N堆石子 ...
- uniapp开发HarmonyOS NEXT应用之项目结构详细解读
昨天的文章介绍了使用uniapp跨平台鸿蒙应用时如何配置开发环境和运行调试项目,今天介绍一下uniapp项目目录的结构. 可能对于从事移动开发的友友来说,uniapp的项目结构看起来有一些陌生,它更接 ...
- 移动端H5页面在不同Android和iOS设备上的兼容适配
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 工具:Prisms:漏洞扫描器,棱镜开源版
Prism X 集资产发现.指纹识别.弱密码检测.漏洞验证于一体,采用模块化 YAML 插件策略配置,实现与真实攻击链高度相似的 PoC 验证机制. 跨平台和轻量级设计:支持多种操作系统,易于部署和使 ...
- ASP.NET Core Minimal API之optional route parameter with default value and optional route parameter
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var app = ...