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']

		

  


猜你喜欢

转载自www.cnblogs.com/lhqlhq/p/9184196.html