【发布时间】:2018-02-18 01:22:53
【问题描述】:
背景
我是 Django 和其他框架的新手,我正在尝试使用 Django Rest 框架为移动应用构建注册和登录的 API 演示。
我想要
我使用APIView和ModelSerializer,注册的参数和约束是
email <required, unique>,
username <required, unique>,
password <required, unique>,
在这里,我的需求集中在异常上,我想获得一个自定义错误代码来指示哪些验证(必需或唯一)失败。
例如
当我发送参数时:
username="", (leaves it blank)
password=123,
email="xxx@yyy.com"
这将导致required 验证失败,并且 JSON 响应返回类似
"username": [
"This field may not be blank."
]
但是,我希望 JSON 响应类似于
{
error_code: 1,
msg: "blah blah blah"
}
这样,移动应用就可以根据error_code为所欲为。
问题
我发现,在框架的验证实现内部,验证失败(所有字段验证失败)都被转化为纯文本并打包在一个数组中,我无法得到具体的异常(如用户名要求异常),而且我无法在响应中生成error_code。
那么,有什么办法可以捕捉到具体的异常吗?
【问题讨论】:
-
在响应中包含这些错误代码有什么具体原因吗?为什么客户端不能使用http错误码?
-
@mikedanylov http 错误代码会有所帮助,但我希望错误更具体,例如
required验证失败或unique验证失败。默认的http错误码400似乎只是告诉我一些验证失败,不够具体 -
那么您可能需要为所有字段编写自定义验证。可以通过覆盖每个字段的序列化程序的验证方法来完成。例如,对于密码,您需要覆盖方法
validate_password,然后您可以随意格式化字段错误对象。
标签: python django validation django-rest-framework