【发布时间】:2019-04-11 09:47:24
【问题描述】:
假设我有一个定义如下的模型:
from django.core.validators import MinValueValidator, MaxValueValidator, RegexValidator
alphanumeric_validator = RegexValidator(r'^[a-zA-Z0-9]*$', 'Only alphanumeric characters are allowed.')
class Person(model.Model):
name = models.CharField(max_length=60, validators=[alphanumeric_validator])
number = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
email = models.EmailField()
现在,假设我正在使用 Django Rest Framework 序列化和创建 Person 对象。它看起来像这样:
from rest_framework import serializers
from .models import Person
from rest_framework.response import Response
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('name', 'number', 'email')
class PostPerson(APIView):
def post(self, request, format=None):
serializer = PersonSerializer(data=request.data)
if serializer.is_valid():
serializer.save()=
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
现在,我的问题是:当我使用is_valid() 验证序列化程序时,DRF 是否处理validators=[alphanumeric_validator] 和validators=[MinValueValidator(0), MaxValueValidator(100)]?另外,我确信 DRF 会自动处理 max_length 属性,但它是否还会检查 email 是否是使用正确正则表达式的实际电子邮件地址?
我通常只是对 clean、full_clean 以及在表单验证和序列化器验证期间调用的所有方法感到困惑,因此希望得到一些可靠的解释。
提前致谢。
【问题讨论】:
标签: django django-rest-framework django-serializer