geekdoc-python-zh/docs/askpython/django-form-validation.md

7.3 KiB
Raw Permalink Blame History

Django 表单验证

原文:https://www.askpython.com/django/django-form-validation

在本文中,我们将了解内置的 Django 表单验证以及 Django 自定义表单验证。

Django 表单验证的先决条件

在进行表单验证之前,您需要知道什么是 Django 表单,以及如何在 Django 中实现它们。

如果您已经熟悉 Django Forms那么请继续阅读这篇文章否则请首先阅读 Django Forms 文章。

内置表单验证

Django 框架提供了一系列内置的表单验证器和表单库。我们将在这里了解他们每一个人。

设置表单和使用内置验证器

Field = forms.Field_Type(validator = value)

所有内置的验证器都遵循上面的语法。

本节中使用的表单视图

以下解释代码基于 views.py 中的以下视图

def EFormView(request):
    if request.method == 'POST':
        form = EForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse('Form saved')
    else:
        form = EForm()
        context = {
            'form':form,
        }
    return render(request, 'books_website/Form.html', context)

模板是一个简单的 HTML 文件,包括 HTML 的表单属性

<form method ='post'>
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value = "Submit">
</form>

1。initial带有“Initial”属性的占位符文本

你可能在网上看到过很多表格都有预先输入的文本,如下所示。

Example

Example

这是使用 Django 表单的初始属性完成的。

因此,如果您需要在表单字段中预先输入文本,我们使用初始属性。

初始默认值是空。

class EForm(forms.Form):
    Name = forms.CharField(initial = "Enter Name")

Initial

Initial

2。标签向表单字段添加标签

标签属性给表单域一个自定义名称。默认情况下Django 使用 forms.py 中指定的表单字段名称作为字段名称。但是使用标签我们可以将其更改为任何其他自定义名称。

class EForm(forms.Form):
    Name = forms.CharField(label = "Full Name")

Label

Label

3.max _ Length限制输入字符的最大长度

max_length 属性确保字段中输入的信息不超过指定值。

class EForm(forms.Form):
    username = forms.CharField(max_length = 10)

Max Length

Max Length

请注意,您不能添加超过 10 个字符。

4.错误消息–添加自定义错误消息

error_message 属性允许您向字段中添加定制的错误消息。此属性重写默认错误信息,并使您能够编写自己的错误信息。

错误消息作为**字典、**传递,如下所示:

class EForm(forms.Form):
    username = forms.CharField(error_message = {'required':'Please Enter your Name',})

Image 26

Error Message

5。禁用–向 Django 表单添加不可编辑的值

在许多表单中,用户无法编辑特定的字段,例如特定公司表单上的公司名称。

disabled 属性允许您这样做。使用它,您可以禁用特定的字段,从而使用户无法编辑它。

class ITJobForm(forms.Form):
    Interview domain = forms.CharField(disabled = True, initial = 'Software Engineer')
    Name = forms.CharField(max_length = 80)

Disabled

Disabled

请注意,您无法更改面试域字段的值。

6.help _ text建议需要在输入中输入的内容

该属性在字段旁边添加了一个帮助文本,以提供关于必须输入的内容的更多信息。

class EForm(forms.Form):
    Name = forms.CharField(help_text ='Please enter your name')

Help Text

Help Text

7.必填–提交前确保表单域有数据

在许多表格中,某些字段是必填的,如申请人的姓名、号码等。这是通过必需的属性完成的。

默认值为

class EForm(forms.Form):
    Name = forms.CharField(required = True)

Fullscreen 1

Required

8.widget–为预定义的目的设置单独的表单字段

Widget 是 Django 对 HTML 输入的表示。每个字段都有其预定义的字段小部件。例如,数字域将有一个只接受数字输入的小部件,电子邮件域只接受电子邮件输入,等等。

我们可以覆盖默认的小部件,并添加我们自己的小部件,如下所示:

class EForm(forms.Form):
    Name = forms.CharField(widget = forms.Textarea)

Widget

Widget

使用 ValidationError 属性的自定义表单验证

正如在 Django 异常处理文章中看到的,验证错误属性用于验证用户输入的定制表单信息。

使用验证错误的语法

ValidationError('text',params = {value : <value>})

这里,值变量和文本取决于我们调用属性的位置,也取决于验证的条件。

ValidationError 的完整语法是:

import django.core.exceptions
if cond:
    raise ValidationError('text')

自定义验证的实现

让我们创建一个只允许用户名在 10 到 20 个字符之间的表单。form.py 代码将是:

class EForm(forms.Form):
    Name = forms.CharField(label = "Full Name")

添加窗体视图代码,如下所示:

from django.core.exceptions import ValidationError
def FormView(request):
    if request.method == 'POST':
        form = EForm(request.POST)
        if form.is_valid():
            Name = form.cleaned_data['Name']
            if len(Name)< 10 or len(Name) > 20:
                raise ValidationError(f'Length of the name:{Name} is not between 10 -20 characters')
            return HttpResponse('Form saved')
    else:
        form = EForm()
        context ={
            'form':form
        }
    return render(request,'books_website/Form.html',context)

请注意验证错误是如何引发的。模板和上面看到的是一样的。

让我们运行服务器并输入少于 10 个字符的名称。你也可以尝试超过 10 个字符,因为它仍然无效我们的条件。

Validation Error 1

Validation Error

当您点击提交时,您将得到如下所示的错误:

Error

Form Error

现在,我们将尝试使用 10 到 20 个字符的名称

Form 10

Form 11 characters

点击提交并检查

Saved

Form Saved

看看表单是如何只接受某些名字的。这就是验证错误的工作方式。

结论

就这样,伙计们!!这都是关于表单验证的。另外,查看官方 Django 表单文档了解更多信息。继续练习!!