我应该把验证器放在Django的什么地方?

2024-10-01 09:32:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习使用Django,希望验证表单提交中的电子邮件地址

这是我现在的表单代码:

from django.forms import ModelForm
from django.core import validators
from first_app.models import FormSubmission
from django import forms

class SignupForm(ModelForm):
    class Meta:
        model = FormSubmission
        fields ='__all__'
        def clean(self):
            all_clean_data = super().clean()
            email = all_clean_data['email']
            vmail = all_clean_data['verify_email']

和我的模型代码

class FormSubmission(models.Model):
    first_name = models.CharField(max_length = 30)
    last_name = models.CharField(max_length = 30)
    email = models.EmailField(unique= False)
    verify_email = models.EmailField(unique = False)
    text = models.CharField(max_length=250)
    #botcatcher = models.CharField(required=False,
                                 #widget = forms.HiddenInput,
                                 #validators=[validators.MaxLengthValidator(0)])


    def __str__(self):
        return "%s %s"% (self.first_name, self.last_name)

验证器应该放在模型还是表单文件中

谢谢


Tags: djangonamefromimportselfclean表单models
1条回答
网友
1楼 · 发布于 2024-10-01 09:32:55

ModelForm本身将验证数据。 您可以这样离开表单:

class SignupForm(ModelForm):
    class Meta:
        model = FormSubmission
        fields ='__all__

要这样验证:

form = SignupForm(request.POST)
if form.is_valid():
    # do something

调用is_valid()时隐式触发模型表单验证

如果需要一些自定义验证,可以定义方法,例如:

class SignupForm(ModelForm):
    class Meta:
        model = FormSubmission
        fields ='__all__

    def clean_email(self):
         email = self.cleaned_data.get('email')
         try:
             User.objects.get(email__iexact=email, is_active=True)
         except User.DoesNotExist:
             raise forms.ValidationError(
                 "Sorry, User with this email does not exists."
             )
         return email

更多信息请参见:https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/

相关问题 更多 >