Django官方网站地址,https://docs.djangoproject.com/zh-hans/4.1/ref/validators/
一、入门级样例代码
- 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异常。这个验证器可以用于定义一个电子邮件字段的验证规则。
- 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"帮助文本内容
}
二、同样的入门级代码(详细解释)
- 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异常。这个验证器可以用于定义一个电子邮件字段的验证规则。
- 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会自动进行验证,确保输入的数据符合我们的要求。