使用 Django Rest 框架,在序列化程序中验证表单数据时,我应该在什么时候提出ParseError
与serializers.ValidationError
?
我的代码看起来像这样:
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
if 'username' not in validated_data:
raise ParseError({'username': ['A username is required.']})
if 'password' not in validated_data:
raise ParseError({'password': ['A password is required.']})
if 'email' not in validated_data or len(validated_data['email']) == 0:
raise ParseError({'email': ['An email is required.']})
if UserModel.objects.filter(email=validated_data['email']):
raise ParseError({'email': ['A user with that email already exists.']})
# ...
如果有的话,应该serializers.ValidationError
其中哪一个?将来我应该遵循什么规则来确定使用哪个?
来自DRF 文档ParseError
如果请求在访问
request.data
时包含格式不正确的数据,则会引发ParseError
。
通常,这由 DRF 本身处理。因此,您不必明确提出它。 在您的情况下,所有条件都在"验证错误"部分下。因此,使用ValidationError
而不是ParseError
更合适。
注意:强烈建议在 Django RESTFramework 中使用validate(...)
方法进行对象级验证,validate_<field_name>(...)
方法进行字段级验证。(在 DRF 中处理create
或任何其他方法的验证并不好(