【发布时间】:2016-02-02 04:50:11
【问题描述】:
我有一个允许用户注册帐户的 API 端点。对于重复的用户名,我想返回 HTTP 409 而不是 400。
这是我的序列化器:
from django.contrib.auth.models import User
from rest_framework.serializers import ModelSerializer
class UserSerializer(ModelSerializer):
username = CharField()
def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise NameDuplicationError()
return value
class NameDuplicationError(APIException):
status_code = status.HTTP_409_CONFLICT
default_detail = u'Duplicate Username'
触发错误时,响应为:{"detail":"Duplicate Username"}。我意识到如果我继承 APIException,则使用密钥 detail 而不是 username。
我想要这个回复而不是{"username":"Duplicate Username"}
或者我想在引发 ValidationError 时指定状态码:
def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise serializers.ValidationError('Duplicate Username',
status_code=status.HTTP_409_CONFLICT)
return value
但这不起作用,因为ValidationError 只返回 400。
有没有其他方法可以做到这一点?
【问题讨论】:
标签: django django-rest-framework