一、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 实战:从异常捕获到自定义错误信息的更多相关文章

  1. Java异常封装(自定义错误信息和描述)

    一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...

  2. SpringBoot自定义错误信息,SpringBoot适配Ajax请求

    SpringBoot自定义错误信息,SpringBoot自定义异常处理类, SpringBoot异常结果处理适配页面及Ajax请求, SpringBoot适配Ajax请求 ============== ...

  3. 自定义错误信息并写入到Elmah

    在ap.net Web项目中一直使用Elmah进行日志记录, 但一直有一个问题困扰我很久,那就是我如何自己生成一个错误并记录到Elmah里去. 你知道有时你需要在项目中生成一个错误用于一些特殊的需求 ...

  4. 自定义 ocelot 中间件输出自定义错误信息

    自定义 ocelot 中间件输出自定义错误信息 Intro ocelot 中默认的 Response 中间件在出错的时候只会设置 StatusCode 没有具体的信息,想要展示自己定义的错误信息的时候 ...

  5. C# 通过扩展WebBrowser捕获网络连接错误信息

    想捕获WebBrowser连接指定网站过程中发生的错误信息,包括网络无法连接.404找不到网页等等错误!经过网上的搜集,找到了以下解决方案,该解决方案不会在网站连接前发出多余的测试请求. 向Webbr ...

  6. jquery.validate使用 - 自定义错误信息

    自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...

  7. django项目部署服务器后无法发送邮箱 错误信息:Connection unexpectedly closed

    使用配置: python 3.7 + django 2.2.1    发送邮件模块 :  from django.core.mail import send_mail 服务器:Centos7 阿里云轻 ...

  8. jQuery.validate.js 自定义错误信息

    var validate = $("form").validate({....})validate.showError({"username":"us ...

  9. jQuery Validate自定义错误信息,自定义方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题

    我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默 ...

随机推荐

  1. 离线版nRF Connect for Desktop安装方法

    首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...

  2. WgelCTF打靶笔记(2)

    参考视频:https://www.bilibili.com/video/BV1itwgeHEEk/?spm_id_from=333.1387.upload.video_card.click&v ...

  3. DevOps常用工具网址

    Linux基础和命令: shell语法查询: http://www.linux6.comhttps://www.tutorialspoint.com/linux_admin/index.htm 正则表 ...

  4. soapUI接口关联教程

    1.新建项目结构 步骤如下: 打开soapUI Pro,新建工作空间(点击File-New Workspace) 选中Test右键点击New Project 选中AlloTest右键点击New Tes ...

  5. Python3循环结构(二) while循环

    Python3 while循环 当循环次数无界时通常会使用while循环. 1.使用while循环输出九九乘法表 i=1 while i < 10: j = 1 while j < i + ...

  6. 【记录】OJ|区间DP|石子合并(环形)

    1. 题干 描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将N堆石子 ...

  7. uniapp开发HarmonyOS NEXT应用之项目结构详细解读

    昨天的文章介绍了使用uniapp跨平台鸿蒙应用时如何配置开发环境和运行调试项目,今天介绍一下uniapp项目目录的结构. 可能对于从事移动开发的友友来说,uniapp的项目结构看起来有一些陌生,它更接 ...

  8. 移动端H5页面在不同Android和iOS设备上的兼容适配

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  9. 工具:Prisms:漏洞扫描器,棱镜开源版

    Prism X 集资产发现.指纹识别.弱密码检测.漏洞验证于一体,采用模块化 YAML 插件策略配置,实现与真实攻击链高度相似的 PoC 验证机制. 跨平台和轻量级设计:支持多种操作系统,易于部署和使 ...

  10. 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 = ...