python - Django 序列化器 : validate function not called

标签 python django django-forms django-views django-rest-framework

我正在尝试覆盖 serializers.is_valid() 调用的 validate() 函数,但它没有被调用。

序列化器.py

class LoginSerializer(serializers.Serializer):
    email = serializers.EmailField(max_length=255,required=True)
    password = serializers.CharField(max_length=128,required=True)


    def validate(self,data):
       '''
       Check for invalid email.
       & blank email and password. 
       '''

       print 'hey i am in login'

       if data['email'] is '':
           raise serializers.ValidationError("Email cannot be empty.")
       if data['password'] is '':
          raise serializers.ValidationError("Password cannot be empty.")
       try:
          validate_email(data['email'])
       except ValidationError:
          raise serializers.ValidationError("The email is not a valid email address.")
       return data

views.py

class LoginAPI(APIView):
    permission_classes = (permissions.AllowAny,)
    serializer = LoginSerializer

    def post(self, request):
       data = self.serializer(data=request.data)
       if data.is_valid():
          #do something
       else:
           return Response(data.errors,status=status.HTTP_400_BAD_REQUEST)

当我调用 is_valid() 时,validate() 函数中的 print 语句没有被执行。 我做错了什么?

最佳答案

我想你没有得到任何 print语句因为validate函数未被调用。

如果其中一个字段有错误,请说 email , validate函数不会被调用,但因为你没有通过 raise_exception=True作为 is_valid 中的参数你没有得到这些错误,你假设 is_valid没有运行。

你可以写 post方法如下:

def post(self, request):
   serializer = self.serializer(data=request.data)

   # following will automatically raise an exception if the serialize data is not valid
   serializer.is_valid(raise_exception=True)

   # do something if the serializer is valid

更新:如果您想在验证不同字段后引发特定消息,您可以创建一个方法 validate_<fieldname>在序列化器中:

def validate_email(self, value):

    if value == '':
        raise serializers.ValidationError("Email cannot be empty.")

    try:
        validate_email(value)
    except ValidationError:
        raise serializers.ValidationError("The email is not a valid email address.")

    return value

关于python - Django 序列化器 : validate function not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710598/

相关文章:

python - 在 django 中创建正则表达式

python - 无法使用模板标签

python - 使用可变长度字符串的可变长度列表,如何创建所有组合

python - 通过唯一标签合并 networkx 中的两个网络映射

Django 查询集操作

python - 使用 POST 数据向用户确认通用 FormView POST 成功

Django 文件大小检查不起作用

python - 访问从 CSV 文件读取的行时列表索引超出范围

python - Sprite 出现得太快

python - Django:更改表单集错误消息