Django--Form小结
Django Form组件 1 验证 2 生成HTML(保留上次输入内容) 3 初始化默认值 FORM重点 -字段 ChoiceField 单选框 MultipleChoiceField 多选框 CharField IntegerField DecimalField 小数 DateField DateTimeField EmailField GenericIPAddressField IP RegexField 自定义正则
Form组件扩展:
1 简单扩展
利用Form组件自带的正则扩展
a,方式一,这种可以写多个正则表达式
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator
class MyForm(Form):
user = fields.CharField(
validators=[RegexValidator(r'^[0-9]+$','请输入数字'),RegexValidator(r'^159[0-9]+$','数字必须为159开头')]
)
b,方式二,这种只能有一个正则表达式
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator
class MyForm(Form):
user=fields.RegexField(r'^[0-9]+$')
2 基于原码流程的扩展
单字段
from django.core.exceptions import NON_FIELD_ERRORS,ValidationError
class AjaxForm(forms.Form):
price = fields.CharField()
user_id = fields.IntegerField(
widget=widgets.Select()
)
def __init__(self, *args, **kwargs): # 实时根据数据库更新,每次运行时,都会执行__int__(),得到choices
super(AjaxForm, self).__init__(*args, **kwargs)
self.fields['user_id'].widget.choices = models.UserInFo.objects.values_list('id', 'username')
#自定义方法,来判断输入的数据是否在数据库中存在
#自定义 clean_字段名
#必须有返回值 sell.clean_data['username]
#如果出错,直接raise ValidationError
def clean_username(self):
v = self.cleaned_data['username']
if models.UserInFo.objects.filter(username=v).count():
# 整体错了
# 自己详细错误信息
raise ValidationError('用户名已经存在')
return self.cleaned_data['username']
def clean_user_id(self):
return self.cleaned_data['user_id']
3 整体错误的判断
def clean(self): value_dict = self.clean_data v1=value_dict.get('username') v2=value_dict.get('user_id') if v1== 'root' and v2==1: raise ValidationError('整体错误信息') return self.clean_data
浙公网安备 33010602011771号