四时宝库

程序员的知识宝库

Django学习笔记2023-6-28验证器(表单)

Django官方网站地址,https://docs.djangoproject.com/zh-hans/4.1/ref/validators/

一、入门级样例代码

  1. Django验证器(Validator)

Django验证器是一个Python函数,用于验证用户输入的数据是否符合预期的格式或规则。在Django中,验证器通常与表单字段相关联,以便确保用户输入的数据是有效的。

以下是一个简单的验证器示例:

from django.core.exceptions import ValidationError


def validate_email(value):
    if not value.endswith('@example.com'):
        raise ValidationError('Email address must end with @example.com')

这个验证器接受一个字符串值作为参数,并检查它是否以"@example.com"结尾。如果不是,则引发ValidationError异常。这个验证器可以用于定义一个电子邮件字段的验证规则。

  1. Django表单(Form)

Django表单是一个Python类,用于处理用户输入的数据并将其转换为适当的数据类型。在Django中,表单通常与视图函数相关联,以便将用户输入的数据传递给模型实例或数据库。

以下是一个简单的表单示例:

from django import forms
from .models import User


class UserForm(forms.ModelForm):
    email = forms.EmailField() # 邮箱字段使用EmailField进行验证
    firstName = forms.CharField(max_length=30) # 名字字段使用CharField进行验证,最大长度为30个字符
    lastName = forms.CharField(max_length=30) # 姓氏字段使用CharField进行验证,最大长度为30个字符

    class Meta: # 表单元数据,包括模型、字段、小部件、标签、错误消息等信息
        model = User # 指定要使用的模型为User模型
        fields = ['email', 'firstName', 'lastName'] # 指定要包含在表单中的字段列表为['email', 'firstName', 'lastName']
        widgets = { # 为每个字段指定小部件,这里使用了EmailInput和TextInput小部件来显示相应的输入框和文本框
            'email': forms.EmailInput(attrs={'class': 'form-control'}),
            'firstName': forms.TextInput(attrs={'class': 'form-control'}),
            'lastName': forms.TextInput(attrs={'class': 'form-control'}),
        }

        labels = { # 为每个字段指定标签,这里使用了对应的字段名称作为标签名
            'email': 'Email address', # Email address是邮箱地址的中文标签名
            'firstName': 'First name', # First name是名字的中文标签名
            'lastName': 'Last name', # Last name是姓氏的中文标签名
        }

        error_messages = { # 为每个字段指定错误消息,这里指定了当某个字段未填写时应该显示的错误消息和提示信息
            'email': {'required': 'Please enter a valid email address'}, # 如果邮箱地址未填写,则显示"Please enter a valid email address"错误消息和提示信息
            'firstName': {'required': 'Please enter your first name'}, # 如果名字未填写,则显示"Please enter your first name"错误消息和提示信息
            'lastName': {'required': 'Please enter your last name'}, # 如果姓氏未填写,则显示"Please enter your last name"错误消息和提示信息
        }

        help_texts = { # 为每个字段指定帮助文本,这里指定了当用户输入不合法时应该显示的帮助文本内容
            'email': 'Your email address will be used to send you password reset emails', # 当用户输入不合法的邮箱地址时,应该显示"Your email address will be used to send you password reset emails"帮助文本内容
        }

二、同样的入门级代码(详细解释)

  1. Django验证器(Validator)

Django验证器是一个Python函数,用于验证用户输入的数据是否符合预期的格式或规则。在Django中,验证器通常与表单字段相关联,以便确保用户输入的数据是有效的。

以下是一个简单的验证器示例:

from django.core.exceptions import ValidationError

def validate_email(value):
    if not value.endswith('@example.com'):
        raise ValidationError('Email address must end with @example.com')   

这个验证器接受一个字符串值作为参数,并检查它是否以"@example.com"结尾。如果不是,则引发ValidationError异常。这个验证器可以用于定义一个电子邮件字段的验证规则。

  1. Django表单(Form)

Django表单是一个Python类,用于处理用户输入的数据并将其转换为适当的数据类型。在Django中,表单通常与视图函数相关联,以便将用户输入的数据传递给模型实例或数据库。

以下是一个简单的表单示例:

from django import forms
from .models import User


class UserForm(forms.ModelForm):
    email = forms.EmailField()
    firstName = forms.CharField(max_length=30)
    lastName = forms.CharField(max_length=30)

    class Meta:
    # model = User:指定表单关联的模型为User模型。
        model = User
# fields = ['email', 'firstName', 'lastName']:指定表单中包含的字段列表,
# 这里只包含email、firstName和lastName三个字段。
        fields = ['email', 'firstName', 'lastName']
#widgets = {'email': forms.EmailInput(attrs={'class': 'form-control'}), 
#'firstName': forms.TextInput(attrs={'class': 'form-control'}),
#'lastName': forms.TextInput(attrs={'class': 'form-control'})}:指定每个字段使用的小部件类型和样式,
#这里使用了EmailInput、TextInput等小部件来显示相应的输入框和文本框。
        widgets = {
            'email': forms.EmailInput(attrs={'class': 'form-control'}),
            'firstName': forms.TextInput(attrs={'class': 'form-control'}),
            'lastName': forms.TextInput(attrs={'class': 'form-control'}),
        }

# labels = {'email': 'Email address', 'firstName': 'First name', 'lastName': 'Last name'}:
# 指定每个字段对应的标签名,这里使用了对应的字段名称作为标签名。
        labels = {
            'email': 'Email address',
            'firstName': 'First name',
            'lastName': 'Last name',
        }

# error_messages = {'email': {'required': 'Please enter a valid email address'}, 
# 'firstName': {'required': 'Please enter your first name'},
#'lastName': {'required': 'Please enter your last name'}}:
# 指定每个字段未填写时应该显示的错误消息和提示信息。
        error_messages = {
            'email': {'required': 'Please enter a valid email address'},
            'firstName': {'required': 'Please enter your first name'},
            'lastName': {'required': 'Please enter your last name'},
        }

# help_texts = {'email': 'Your email address will be used to send you password reset emails'}
# :指定每个字段的帮助文本内容。
        help_texts = {
            'email': 'Your email address will be used to send you password reset emails',
        }
# required = ['email', 'firstName', 'lastName']:指定这个表单必须填写哪些字段才能提交。
        required = ['email', 'firstName', 'lastName']
# exclude = []:指定这个表单不需要排除哪些字段。
        exclude = []
# empty_values = []:指定这个表单不允许哪些空值。
        empty_values = []
# validation_errors = {}:指定这个表单验证失败时的错误信息。
        validation_errors = {}
# messages = {}:指定这个表单成功时的提示信息。
        messages = {}
# flags = {}:指定这个表单的一些标志位。
        flags = {}
# can_delete = False:指定当前用户是否有删除权限。
        can_delete = False
# can_add = True:指定当前用户是否有添加权限。
        can_add = True
# can_change = True:指定当前用户是否有修改权限。
        can_change = True
# can_undelete = False:指定当前用户是否有恢复删除权限。
        can_undelete = False
# can_view_details = True:指定当前用户是否有查看详细信息权限。
        can_view_details = True
# can_edit_permissions = False:指定当前用户是否有编辑权限。
        can_edit_permissions = False
# can_change_permissions = False:指定当前用户是否有更改权限。
        can_change_permissions = False

三、稍微有点复杂的样例代码
以下是样例代码:

from django.core.validators import RegexValidator
from django.db import models

class MyModel(models.Model):
    # 定义一个正则表达式验证器,用于验证输入的字符串是否只包含字母和数字
    alphanumeric_validator = RegexValidator(
        r'^[a-zA-Z0-9]*#39;,
        '只允许输入字母和数字.'
    )

    # 定义一个 CharField 字段,使用 alphanumeric_validator 进行验证
    my_field = models.CharField(
        max_length=20,
        validators=[alphanumeric_validator],
        help_text='请输入最多20个字符的字母和数字.'
    )

以上代码使用了Django的正则表达式验证器(RegexValidator)来验证输入的字符串是否只包含字母和数字。在MyModel模型中,我们定义了一个my_field字段,它是一个CharField类型,并使用alphanumeric_validator进行验证。alphanumeric_validator的正则表达式为^[a-zA-Z0-9]*$,即只允许输入字母和数字。

在字段定义中,我们还通过help_text参数提供了一条帮助文本,提示用户输入最多20个字符的字母和数字。

这样,当我们在使用该模型时,Django会自动进行验证,确保输入的数据符合我们的要求。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接