鱼C论坛

 找回密码
 立即注册
查看: 690|回复: 2

[已解决]raise ValidationError与self.add_error与form.error

[复制链接]
发表于 2023-9-18 20:48:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请大神讲解一下,什么情况用哪种报错方式,有什么区别?最好带一些使用场景
最佳答案
2023-9-18 20:48:26
在Django中,我们可以使用三种方式来报告表单验证错误:

1.  raise ValidationError : 通过抛出 ValidationError 异常来报告表单验证错误。这种方式适用于在表单中进行自定义验证逻辑时,如果验证失败,我们可以通过抛出异常来报告错误。

例如,我们可以在表单的  clean  方法中添加自定义验证逻辑:
from django import forms
from django.core.exceptions import ValidationError

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()

    def clean(self):
        cleaned_data = super().clean()
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')
        if name and email:
            if 'example.com' in email:
                raise ValidationError("Email addresses from example.com are not allowed.")

2.  self.add_error : 这种方式适用于在表单字段级别上进行验证。如果我们需要在特定字段上报告错误,我们可以使用  self.add_error  方法来添加错误信息。

例如,我们可以在表单字段的  clean  方法中添加验证逻辑:
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if email and 'example.com' in email:
            self.add_error('email', "Email addresses from example.com are not allowed.")
        return email

3.  form.errors : 这种方式适用于在视图函数中直接报告表单验证错误。如果我们需要在视图函数中手动验证表单,并直接报告错误,我们可以使用  form.errors  属性来添加错误信息。

例如,我们可以在视图函数中手动验证表单:
from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据
            pass
        else:
            # 手动报告表单验证错误
            form.errors['email'] = ["Email addresses from example.com are not allowed."]
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

总的来说, raise ValidationError  适用于在表单级别上进行自定义验证逻辑; self.add_error  适用于在字段级别上进行验证,并添加错误信息; form.errors  适用于在视图函数中手动处理表单验证错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-18 20:48:26 | 显示全部楼层    本楼为最佳答案   
在Django中,我们可以使用三种方式来报告表单验证错误:

1.  raise ValidationError : 通过抛出 ValidationError 异常来报告表单验证错误。这种方式适用于在表单中进行自定义验证逻辑时,如果验证失败,我们可以通过抛出异常来报告错误。

例如,我们可以在表单的  clean  方法中添加自定义验证逻辑:
from django import forms
from django.core.exceptions import ValidationError

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()

    def clean(self):
        cleaned_data = super().clean()
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')
        if name and email:
            if 'example.com' in email:
                raise ValidationError("Email addresses from example.com are not allowed.")

2.  self.add_error : 这种方式适用于在表单字段级别上进行验证。如果我们需要在特定字段上报告错误,我们可以使用  self.add_error  方法来添加错误信息。

例如,我们可以在表单字段的  clean  方法中添加验证逻辑:
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if email and 'example.com' in email:
            self.add_error('email', "Email addresses from example.com are not allowed.")
        return email

3.  form.errors : 这种方式适用于在视图函数中直接报告表单验证错误。如果我们需要在视图函数中手动验证表单,并直接报告错误,我们可以使用  form.errors  属性来添加错误信息。

例如,我们可以在视图函数中手动验证表单:
from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据
            pass
        else:
            # 手动报告表单验证错误
            form.errors['email'] = ["Email addresses from example.com are not allowed."]
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

总的来说, raise ValidationError  适用于在表单级别上进行自定义验证逻辑; self.add_error  适用于在字段级别上进行验证,并添加错误信息; form.errors  适用于在视图函数中手动处理表单验证错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-18 22:40:23 | 显示全部楼层
raise ValidationError是在表单验证过程中,当某个字段的值不满足特定条件时,手动抛出一个ValidationError异常。这种方式通常用于自定义验证逻辑,可以根据具体的条件判断来抛出异常,比如判断密码强度不够或者用户名已存在等。

self.add_error是在表单验证过程中,当某个字段的值不满足特定条件时,将错误信息添加到该字段的错误列表中。这种方式通常用于内置的字段验证,比如使用内置的required验证器来验证字段是否为空,如果为空则调用self.add_error方法来添加错误信息。

form.error是在模板中用于显示表单错误信息的变量。当表单验证不通过时,错误信息会被添加到该变量中,然后在模板中通过form.error来显示错误信息。

使用场景举例:
· 如果需要自定义验证逻辑,比如判断密码强度不够,可以使用raise ValidationError来手动抛出异常。
· 如果使用内置的验证器,比如required验证器,可以使用self.add_error来添加错误信息。
· 在模板中,可以通过form.error来显示表单验证的错误信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-27 22:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表