【问题标题】:Which is the best way to validate errors in Django?在 Django 中验证错误的最佳方法是什么?
【发布时间】:2020-07-27 17:33:21
【问题描述】:

我发现在 Django 中有很多方法可以验证错误,我只是想知道哪一种更可取,为什么?

例如

  1. 使用干净的形式,例如:

        deadline = self.cleaned_data.get('deadline')
        if datetime.strptime(str(deadline)[:19], '%Y-%m-%d %H:%M:%S') < datetime.today():
            raise forms.ValidationError(_('Deadline cannot be in past!'))
        return deadline
    
    
  2. 在保存之前,我们可以验证是否有任何错误,并在一切正常的情况下发送实例,例如:

     def save(self, force_insert=False, force_update=False, *args, **kwargs):
         if datetime.strptime(str(deadline)[:19], '%Y-%m-%d %H:%M:%S') < datetime.today():
             raise forms.ValidationError(_('Deadline cannot be in past!'))
         else:
             super(MODEL, self).save(force_insert, force_update, *args, **kwargs)
    
  3. 并且不要忘记模型中的验证器,我可以在它自己的字段中使用一个验证器,例如:

     deadline = models.DateTimeField(
                   verbose_name=_('deadline'),
                   validators=[MaxValueValidator(datetime.datetime.today())],
                   help_text=_('Note that the end time will be at the midnight of the day you picked.'),
    

    )

此外,我们可以在类表单中的表单中执行此操作,我们可以在保存之前检查一切是否正确

我想知道哪个是最好的程序员,写专业的代码

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    验证模型的最佳方法是使用 clean_fields 的原因是当 clean_fields 中发生错误时,它仅针对该特定字段显示,并且此错误用于验证一个字段

    class ContactForm(forms.Form):
        message = forms.CharField(widget=forms.Textarea)
    
        def clean_message(self):
            message = self.cleaned_data['message']
            message = message.replace('a', '') # remove all "a"s from message
            if len(message) >= 5:
                raise ValidationError('Too many characters ...')
            return message
    

    【讨论】:

    • 是的,我同意你的观点,但是什么时候考虑一​​下,使用我之前提到的第三个选项,它使用模型验证器,只会显示同一字段的错误,所以我们可以说它们的工作方式相同!
    • 是的一样??
    猜你喜欢
    • 2016-07-27
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多