当您使用form.is_valid和form.cleaned_data时,django清洗和验证是什么?

时间:2018-12-24 00:34:40

标签: django

因此,我正在根据教程创建用户注册表格:

def RegisterView(request):
    form = RegisterForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        email = form.cleaned_data.get("email")
        password = form.cleaned_data.get("password")
        new_user = User.objects.create_user(username, email, password)

但是该教程没有说明django如何清除数据以及如何知道数据有效。

2 个答案:

答案 0 :(得分:0)

您的表格可以使用一种干净的方法:

class YourForm(forms.Form):
    name = forms.CharField(max_length=100)

    # it can be as simple as this
    def clean(self):
        cleaned_data = super(YourForm, self).clean()
        name = cleaned_data.get('name')

    # or you can clean specific fields with custom validation logic
    def clean_name(self):
        cleaned_data = self.cleaned_data
        name = self.cleaned_data['name']

        if name == 'John':
            msg = 'John is not an acceptable name.'
            self._errors['name'] = self.error_class([msg])
            del cleaned_data['name']
            return name
        return name

在您的情况下,Django可能仅使用默认逻辑进行验证。例如,如果在模型中将您的电子邮件字段指定为models.EmailField,则Django仅检查以确保输入的内容是有效的电子邮件地址。

答案 1 :(得分:0)

From the doc of cleaned_data

  

Form类中的每个字段不仅负责验证数据,还负责“清理”数据-将其标准化为一致的格式。


Django如何清除数据?

Django表单的 is_valid() 方法调用 full_clean() 方法,并生成 self.cleaned_data 属性和 self.errors 属性。因此,调用 is_valid() 方法后,您将拥有这两个属性


Django如何知道数据是否有效?

调用 is_valid() 方法后, self.errors 方法将具有格式错误详细信息或空dict。因此,如果该属性没有值,( Empty dict),则该表格有效。否则,该表格无效