Django+DRF 实战:从异常捕获到自定义错误信息
文章目录
- 一、DRF 异常
- 介绍
- `ValidationError` 异常
- 二、`ValidationError` 异常实战
- 实战场景
- 定义序列化器
- 定义视图
- 实战效果
一、DRF 异常
介绍
APIException
类是 DRF 异常的基类。通过继承APIException,DRF 提供了多种内置异常类。
ParseError
:当请求解析失败时抛出。AuthenticationFailed
:认证失败时会出现这个异常。NotAuthenticated
:未认证的用户访问需要权限的资源时触发。PermissionDenied
:权限被拒绝时抛出该异常。NotFound
:请求的资源不存在时出现此异常。MethodNotAllowed
:使用不支持的 HTTP 方法时触发。NotAcceptable
:无法满足请求的Accept
标头时抛出。Throttled
:请求被限流时会出现这个异常。ValidationError
:数据验证失败时触发。
通过继承 APIException
类,可以实现自定义(业务)异常。并根据业务需求在视图层返回。但这种方式比较麻烦,不太推荐。
from rest_framework.exceptions import APIExceptionclass ServiceUnavailable(APIException):status_code = 503default_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从入门到实战》专栏!关注不迷路~