class FM(forms.Form): # 字段本身只做验证 user = fields.CharField( error_messages={'required': '用户名不能为空.'}, # widget=widgets.Textarea(attrs={'class': 'c1'}), label="用户名", ) pwd = fields.CharField( max_length=12, min_length=6, error_messages={ 'required': '密码不能为空.', 'min_length': '密码长度不能小于6', "max_length": '密码长度不能大于12' }, widget=widgets.PasswordInput(attrs={'class': 'c2'}), label="密码", ) email = fields.EmailField(label="email", error_messages={ 'required': '邮箱不能为空.', 'invalid': "邮箱格式错误" }) f = fields.FileField() # p = fields.FilePathField(path='app01') # 单选框 city1 = fields.ChoiceField(choices=[(0, '上海'), (1, '广州'), (2, '东莞')]) # 复选框 city2 = fields.MultipleChoiceField(choices=[(0, '上海'), (1, '广州'), (2, '东莞')])
class FORM(forms.Form): user = fields.CharField(error_messages={'required': '用户名不能为空'}, ) pwd = fields.CharField( max_length=12, min_length=6, error_messages={ 'required': '密码不能为空', 'max_length': '密码长度不能大于12', 'min_length': '密码长度不能小于6' }, widget=widgets.PasswordInput(attrs={'class': 'pas'})) email = fields.EmailField(error_messages={ 'required': '邮箱不能为空', 'invalid': '邮箱格式错误' }) remark = fields.CharField(required=False, label="备注", initial="备注信息", widget=widgets.Textarea(attrs={'class': 'user'})) f = fields.FileField() # p = fields.FilePathField(path='app01') city1 = fields.ChoiceField(choices=[(0, '上海'), (1, '广州'), (2, '东莞')]) city2 = fields.MultipleChoiceField(choices=[(0, '上海'), (1, '广州'), (2, '东莞')])
class ArticleForm(Form): def __init__(self, request, *args, **kwargs): super(ArticleForm, self).__init__(*args, **kwargs) blog_id = request.session['user_info']['blog'] self.fields[ 'article_classification_id'].choices = Classification.objects.filter( blog_id=blog_id).values_list('id', 'title') self.fields['tags'].choices = Tags.objects.filter( blog_id=blog_id).values_list('id', 'title') publish = 0 title = fields.CharField(widget=widgets.TextInput(attrs={ 'class': 'form-control', 'placeholder': '文章标题' })) summary = fields.CharField(widget=widgets.Textarea( attrs={ 'class': 'form-control', 'placeholder': '文章简介', 'rows': '3' })) detail = fields.CharField(widget=widgets.Textarea( attrs={'class': 'kind-content'})) # img = fields.ImageField() article_type_id = fields.IntegerField(widget=widgets.RadioSelect( choices=Article.type_choices)) article_classification_id = fields.ChoiceField(choices=[], widget=widgets.RadioSelect) img = fields.FileField(required=False) tags = fields.MultipleChoiceField(choices=[], widget=widgets.CheckboxSelectMultiple)
class RegisterForm(Form): error_message={ 'required':'不能为空', 'min_length':'长度不符合', } username=fields.CharField(label='用户名',max_length=64,min_length=3 , widget=widgets.TextInput(attrs={'class': 'form-control'}), error_messages=error_message) password=fields.CharField(max_length=64,min_length=3,label='password',widget=widgets.PasswordInput(attrs={'class':'form-control'}), error_messages=error_message) confirm_password=fields.CharField(max_length=64,min_length=3,label='confirm_password', widget=widgets.PasswordInput(attrs={'class':'form-control'}), error_messages=error_message) email=fields.EmailField(label='email',widget=widgets.TextInput(attrs={'class':'form-control'}), ) nickname=fields.CharField(max_length=64,label='nickname',error_messages=error_message, widget=widgets.TextInput(attrs={'class':'form-control'}),) avatar=fields.FileField(widget=widgets.FileInput(attrs={'id':'imgSelect','class':'avatar_input'}), ) def __init__(self,request,*args,**kwargs): super(RegisterForm,self).__init__(*args,**kwargs) self.request=request def clean_code(self): input_code=self.cleaned_data['code'] session_code=self.request.session.get('code') if input_code.upper()==session_code.upper(): return input_code raise ValidationError('验证码错误') def clean_name(self): name1=self.cleaned_data['username'] data_username=models.UserInfo.objects.filter(username=name1).first() if data_username: raise ValidationError('用户已存在') return self.cleaned_data['username'] def clean(self): p1=self.cleaned_data['password'] print(p1,'=================') p2=self.cleaned_data['confirm_password'] if p1==p2: print(p1, '=================') return None else: self.add_error('confirm_password',ValidationError('密码不一致'))
class TestimgForm(forms.Form): title = fields.CharField() img = fields.FileField() times = fields.DateTimeField(widget=widgets.DateTimeInput( attrs={ 'type': "datetime-local", 'value': "2018-09-01-14:02:30" }))
class AvatarForm(forms.Form): avatar = fields.FileField(widget=widgets.FileInput(attrs={ 'id': 'avatarImg', }), # required=False ) def __init__(self, request, *args, **kwargs): super(AvatarForm, self).__init__(*args, **kwargs) self.request = request
class IFOPCMessageForm(Form): message = fields.CharField( required=True, widget=Textarea(attrs={'class': 'form-control', 'rows': 4}), ) doc1 = fields.FileField(required=False) doc2 = fields.FileField(required=False) doc3 = fields.FileField(required=False) doc4 = fields.FileField(required=False) doc5 = fields.FileField(required=False) doc6 = fields.FileField(required=False) doc7 = fields.FileField(required=False) doc8 = fields.FileField(required=False)
class UpForm(forms.Form): username = fields.CharField(initial='无名氏') date = forms.DateField(initial=datetime.date.today,disabled=True) dataset_name = fields.CharField(max_length=50,required=True) file = fields.FileField(required=True) def clean_datasetName(self): dataset_name = self.cleaned_data['dataset_name'] datasets = Batch.objects.filter(dataset_name=dataset_name) if datasets: raise ValidationError('相同数据集名称已存在,请更改!') return dataset_name
class EmblemForm(StarkModelForm): issuer = fields.ChoiceField(widget=widgets.RadioSelect(), label='颁发者', choices=((1, '老师'), (2, '家长'), (3, '两者皆可'))) classification = fields.ChoiceField(widget=widgets.RadioSelect(), label='徽章分类', choices=((1, '鼓励与表扬'), (2, '惩罚与批评'))) scope = fields.ChoiceField(required=False, widget=widgets.RadioSelect(), label='颁发范围', choices=((1, '校级别'), (2, '班级'))) subject = forms.ModelMultipleChoiceField( required=False, label='关联课程', queryset=Course.objects.all(), widget=widgets.CheckboxSelectMultiple()) grade = forms.ModelMultipleChoiceField( required=False, label='关联年级', queryset=Grade.objects.all(), widget=widgets.CheckboxSelectMultiple()) icon = fields.FileField( widget=fields.FileInput(attrs={'style': 'display:none'}), label='徽章图片') emblem_type = forms.ModelChoiceField( required=False, label='徽章类型', queryset=EmblemType.objects.exclude(id__in=[ item.pid.id for item in EmblemType.objects.filter(pid__isnull=False) ])) is_custom = fields.ChoiceField(widget=widgets.RadioSelect(), label='是否允许自定制', choices=((True, '允许'), (False, '禁止')), initial=False) class Meta: model = Emblem fields = ( 'emblem_name', 'icon', 'description', 'classification', 'scope', 'is_custom', 'issuer', 'subject', 'emblem_type', 'grade', )
class TestForm(forms.Form): user = fields.CharField( required=True, max_length=12, min_length=3, error_messages={}, widget=widgets.TextInput(attrs={'class': 'c1'}), # 定制HTML插件 label='用户名', initial='请输入用户名', help_text='帮助信息', show_hidden_initial=True, # 插件后面加一个隐藏且具有默认值的插件(可用于检验两次输入是否一致) validators=[], # 自定义验证规则 localize=True, # 是否支持本地化 disabled=True, # 是否不能编辑 label_suffix=':', ) age = fields.IntegerField() email = fields.EmailField() img = fields.FileField() city = fields.ChoiceField( choices=[ (1, '北京'), (2, '上海'), (3, '沙河'), ], initial=2, ) city = fields.TypedChoiceField( coerce=lambda x: int(x), # 类型转换 结果返回整型 choices=[ (1, '北京'), (2, '上海'), (3, '沙河'), ], initial=2, ) hobby = fields.MultipleChoiceField( choices=[ (1, 'a'), (2, 'b'), (3, 'c'), ], initial=[ 1, 2, ], )
class RegisterForm(Form): username = fields.CharField(widget=widgets.TextInput( attrs={"class": "form-control"})) password = fields.CharField(widget=widgets.PasswordInput( attrs={"class": "form-control"})) password1 = fields.CharField(widget=widgets.PasswordInput( attrs={"class": "form-control"})) nickname = fields.CharField(widget=widgets.TextInput( attrs={"class": "form-control"})) email = fields.EmailField(widget=widgets.TextInput( attrs={"class": "form-control"})) check_str = fields.CharField(widget=widgets.TextInput( attrs={"class": "form-control"})) # 上传头像的路径 avatar = fields.FileField(widget=widgets.FileInput(attrs={"id": "img2"})) def __init__(self, request=None, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.request = request def clean_check_str(self): """ 验证码判决 :return: """ check_str1 = self.cleaned_data["check_str"] be_checked_str = self.request.session.get("check_str") if check_str1.upper() == be_checked_str.upper(): return check_str1 from django.core.exceptions import ValidationError raise ValidationError("验证码输入错误") def clean(self): """ 判断注册时密码输入 :return: """ from django.core.exceptions import ValidationError cleaned_data = super(RegisterForm, self).clean() pwd = cleaned_data.get("password") pwd1 = cleaned_data.get("password1") if pwd != pwd1: # raise ValidationError("密码输入不一致") self.add_error("password1", "密码输入不一致")
class ArticleForm(Form): img = fields.FileField() title = fields.CharField( max_length=64, widget=widgets.TextInput( attrs={'id': 'title-input', 'placeholder': "输入文章标题", 'class': 'form-control'} ) ) content = fields.CharField( widget=widgets.Textarea( attrs={'id': 'content-input', 'placeholder': "输入文章正文", 'class': 'form-control'} ) ) summary = fields.CharField( widget=widgets.Textarea( attrs={'id': 'summary-input', 'rows': "3", 'placeholder': "输入简介", 'class': 'form-control'} )) article_type_choice = models.Article.type_choices article_type_id = fields.IntegerField( widget=widgets.Select( choices=article_type_choice, attrs={'id': 'type-input', 'placeholder': "输入简介", 'class': 'form-control'} ) ) blog = fields.IntegerField( widget=widgets.NumberInput(attrs={'id': 'blog-input', 'class': 'hide'}) ) tag_type_choice = list(models.Tag.objects.values_list('id', 'title')) tag = fields.MultipleChoiceField( choices=tag_type_choice, widget=widgets.CheckboxSelectMultiple( attrs={'id': 'tag-input', 'placeholder': "输入简介", 'class': 'checkbox-inline'} ) ) def clean_content(self): old = self.cleaned_data['content'] from utils.xss_defend import xss return xss(old)
class TestForm(forms.Form): user = fields.CharField( required=True, # 是否必填 max_length=12, # 最大长度 min_length=3, # 最小长度 error_messages={}, # 错误提示 widget = widgets.TextInput(attrs={'class':'c1'}), # 定制HTML插件 label='用户名', initial='请输入用户', help_text='asdfasdf', show_hidden_initial=False, # validators=[] disabled=True, label_suffix='->' ) age = fields.IntegerField( label='年龄', max_value= 12, min_value=5, error_messages={ 'max_value':'太大了' } ) email = fields.EmailField( label='邮箱' ) img = fields.FileField() city = fields.TypedChoiceField( coerce=lambda x: int(x), choices=[(1,'上海',),(2,'北京'),(3,'沙河'),], initial=2 ) bobby = fields.MultipleChoiceField( choices=[(1,'刚娘'),(2,'铁娘'),(3,'钢弹')], initial=[1,2] ) xoo = fields.FilePathField( path='app01' )
class RegisterForm(Form): username=fields.CharField( widget=widgets.TextInput(attrs={'class':"form-control"}) ) password=fields.CharField( widget=widgets.PasswordInput(attrs={'class': "form-control"}) ) password2=fields.CharField( widget=widgets.PasswordInput(attrs={'class': "form-control"}) ) avater=fields.FileField(widget=widgets.FileInput(attrs={'id':"imgSelect" ,'class':"f1"})) code=fields.CharField( widget=widgets.TextInput(attrs={'class': "form-control"}) ) def __init__(self,request,*args,**kwargs): super(RegisterForm, self).__init__(*args,**kwargs) self.request=request def clean_code(self): input_code=self.cleaned_data['code'] session_code=self.request.session.get('code') if input_code.upper()==session_code.upper(): return input_code raise ValidationError('验证码错误') # def clean_password2(self): # p1=self.cleaned_data['password'] # p2=self.cleaned_data['password2'] # # if p1==p2: # # return p2 # # raise ValidationError('密码错误') # return p2 def clean(self): p1 = self.cleaned_data.get('password') p2=self.cleaned_data.get('password2') print(p1==p2) if p1==p2: # return self.cleaned_data #return None都可以 return None else: # raise ValidationError('密码不一致') self.add_error("password2",ValidationError("密码不一致"))
class TaxForm(forms.GSoCModelForm): """Django form for the student tax form.""" class Meta: model = profile_model.GSoCStudentInfo css_prefix = 'student_form' fields = ['tax_form'] widgets = {} tax_form = fields.FileField(label='Upload new tax form', required=True) def fileFieldName(self): """Returns the name of the FileField in this form.""" return 'tax_form' def _admin(self): return self.request_data.kwargs['admin'] def _r(self): if self._admin(): self.request_data.redirect.profile() else: self.request_data.redirect.program() return self.request_data.redirect def _urlName(self): if self._admin(): return 'gsoc_tax_form_download_admin' else: return 'gsoc_tax_form_download' def __init__(self, request_data=None, **kwargs): super(TaxForm, self).__init__(**kwargs) self.request_data = request_data field = self.fields['tax_form'] if not (self.instance and self.instance.tax_form): field._file = None field._link = None else: field._file = self.instance.tax_form field._link = self._r().urlOf(self._urlName())
class FM(forms.Form): # user = forms.CharField() # pwd = forms.CharField() # email = forms.EmailField() # 字段本身只做认证 user = fields.CharField(error_messages={'required': "用户名不能为空"}, widget=widgets.Input(attrs={'id': 'username'}), label="用户名") pwd = fields.CharField( max_length=12, min_length=6, error_messages={ 'required': "密码不能为空", 'min_length': "密码长度不能小于6", 'max_length': "密码长度不能大于12" }, widget=widgets.PasswordInput(attrs={'id': 'pwd'}), # widget=widgets.PasswordInput, ) gender = fields.ChoiceField( choices=((1, '男'), (2, '女')), initial=2, label="性别:" # widget=widgets.RadioSelect # widget=widgets.Select ) # gender = fields.MultipleChoiceField( # choices=((1, '男'), (2, '女')), # initial=2, # label="性别:" # # widget=widgets.RadioSelect # ) email = fields.EmailField(error_messages={ 'required': "邮箱不能为空", 'invalid': "邮箱格式不对" }, widget=widgets.Input(attrs={'id': 'em'})) f = fields.FileField() f_show = fields.FilePathField(path='cache')
class FieldForm(DForms.Form): f1 = fields.CharField(max_length=6, required=True, initial="小虎", validators=[ RegexValidator(r'^[0-9]+$', '11111', code='f1'), RegexValidator(r'^159[0-9]+$', '2222', code='f2') ], error_messages={ 'required': '不能为空', 'f1': 'geshicuowu', 'f2': 'kajdlfkjasldf', 'max_length': 'taichangla' }, label='爱抚1', show_hidden_initial=True, disabled=False, label_suffix="-->") # f2 = fields.RegexField(r'^159[0-9]+$') f3 = fields.FileField() f4 = fields.ChoiceField(initial=2, choices=[( 1, '赵四', ), (2, "刘能"), (3, '六大脑袋')]) f5 = fields.TypedChoiceField(coerce=lambda x: int(x), initial=2, choices=[( 1, '赵四', ), (2, "刘能"), (3, '六大脑袋')]) f6 = fields.MultipleChoiceField(initial=[1, 2], choices=[( 1, '赵四', ), (2, "刘能"), (3, '六大脑袋')]) f7 = fields.SplitDateTimeField() f8 = fields.FilePathField(path='app01', allow_folders=True, recursive=True)
class FM(forms.Form): #第一种方式,最简版: # user = fields.CharField( # initial = 2, # widget = widgets.RadioSelect(choices=((1, '上海'), (2, '北京'),)) # ) user = fields.CharField( error_messages={'required': '用户名不能为空.'}, widget=widgets.TextInput( attrs={'class': 'c1'}), #定义插件,修改标签类型,CSS样式,属性等 label='用户名', # initial='root',#默认值 help_text='这是帮助信息', ) pwd = fields.CharField( max_length=12, min_length=6, error_messages={ 'required': '密码不能为空', 'min_length': '密码长度不能小于6', 'max_length': '密码长度不能大于12' }, widget=widgets.PasswordInput( attrs={'style': 'background-color:blue;color:white'})) email = fields.EmailField(error_messages={ 'required': '邮箱不能为空.', 'invalid': "邮箱格式错误" }) f = fields.FileField() p = fields.FilePathField(path='app1') city = fields.ChoiceField(choices=[ (0, '选项1'), (1, '选项2'), (2, '选项3'), ]) city1 = fields.MultipleChoiceField(choices=[ (0, '选项1'), (1, '选项2'), (2, '选项3'), ])
class EnrollmentForm(forms.GSoCModelForm): """Django form for the student enrollment form.""" Meta = object enrollment_form = fields.FileField(label='Upload new enrollment form', required=True) def fileFieldName(self): """Returns the name of the FileField in this form.""" return 'enrollment_form' def _admin(self): return self.request_data.kwargs['admin'] def _r(self): if self._admin(): self.request_data.redirect.profile() else: self.request_data.redirect.program() return self.request_data.redirect def _urlName(self): if self._admin(): return 'gsoc_enrollment_form_download_admin' else: return 'gsoc_enrollment_form_download' def __init__(self, request_data=None, **kwargs): super(EnrollmentForm, self).__init__(**kwargs) self.request_data = request_data field = self.fields['enrollment_form'] if not (self.instance and self.instance.enrollment_form): field._file = None field._link = None else: field._file = self.instance.enrollment_form field._link = self._r().urlOf(self._urlName())
def chooseField(question): """ Choose a proper form field for the question. :param question: question to be allocated a field :type question: Question :return: the corresponding field :rtype: fields.Field """ type = question.type if type == 1: choices = question.choice_set.values_list('order', 'description') return fields.ChoiceField(choices=choices, widget=RadioSelect(), label=question.description, label_suffix='', required=question.require) elif type == 2: choices = question.choice_set.values_list('order', 'description') return fields.MultipleChoiceField(choices=choices, widget=CheckboxSelectMultiple(), label=question.description, label_suffix='', required=question.require) elif type == 3: return fields.CharField(widget=TextInput(), label=question.description, label_suffix='', required=question.require) elif type == 4: return fields.FileField(widget=FileInput(), label=question.description, label_suffix='', required=question.require) else: return None
class ArticleForm(forms.Form): title = fields.CharField(label='标题',max_length=40, error_messages={ 'required':'标题不能为空', 'max_length':'长度不能超过20个字' }, widget=widgets.TextInput(attrs={'class': "form-control",'placeholder':"标题",'size':"60"}) ) author = fields.CharField(label='作者',max_length=12, error_messages={ 'required': '作者不能为空', 'max_length': '长度不能超过6个字' }, widget=widgets.TextInput(attrs={'class': "form-control",'placeholder':"作者"})) summary = fields.CharField(label='摘要',max_length=200, error_messages={ 'required': '摘要不能为空', 'max_length': '长度不能超过100个字' }, widget=widgets.Textarea(attrs={'row':"2",'style':"height:60px;",'class': "form-control",'placeholder':"摘要不要超过100字"})) img = fields.FileField(label='缩略图',required=True) content = fields.CharField(label='内容', error_messages={ 'required': '文章内容不能为空', }, widget=widgets.Textarea(attrs={'class': "form-control",'id': "kindeditor"})) tag = forms.ModelMultipleChoiceField(label='标签',queryset=Tag.objects.all(), error_messages={ 'required': '请选择标签', }, widget=widgets.SelectMultiple(attrs={'class': "form-control"})) classify = forms.ModelChoiceField(label='分类',queryset=Classify.objects.all(), error_messages={ 'required': '请选择分类', }, widget=widgets.Select(attrs={'class': "form-control"}))
class RegisterForm(forms.Form): email = fields.EmailField() username = fields.CharField() password = fields.CharField() avatar = fields.FileField(required=False)
class ChangeInfoForm(forms.Form): username = fields.CharField() password = fields.CharField() avatar = fields.FileField(required=False)
class RegForm(Form): email = fields.EmailField( required=True, error_messages={ 'required': '请输入邮箱地址', 'invalid': '请输入正确的邮箱格式', }, widget=widgets.TextInput(attrs={ 'placeholder': '需要通过邮件激活账户', 'class': 'form-control' })) # widget=widgets.TextInput(attrs={'placeholder': '需要通过邮件激活账户'})), tel = fields.IntegerField( required=True, error_messages={ 'required': '请输入手机号码', }, widget=widgets.TextInput(attrs={ 'placeholder': '激活帐户需要手机短信验证', 'class': 'form-control' })) username = fields.CharField( required=True, max_length=18, min_length=4, error_messages={ 'required': '请输入登陆用户名', 'min_length': '不合要求,至少为4个字符', 'max_length': '不合要求,至多为18个字符', }, widget=widgets.TextInput(attrs={ 'placeholder': '登录用户名,不少于4个字符', 'class': 'form-control' })) nickname = fields.CharField( required=True, max_length=18, min_length=4, error_messages={ 'required': '请输入显示名称', 'min_length': '不合要求,至少为4个字符', 'max_length': '不合要求,至多为18个字符', }, widget=widgets.TextInput(attrs={ 'placeholder': '即昵称,不少于2个字符', 'class': 'form-control' })) avatar = fields.FileField(required=False) password = fields.CharField( required=True, min_length=8, max_length=30, error_messages={ 'required': '请输入密码', 'min_length': '不合要求,密码长度要求8~30位', 'max_length': '不合要求,密码长度要求8~30位' }, widget=widgets.TextInput(attrs={ 'placeholder': '至少8位,必须包含字母、数字', 'class': 'form-control' }), validators=[RegexValidator('\d+', '密码必须包含字母、数字的组合')]) repeat_password = fields.CharField( required=True, error_messages={'required': '请输入确认密码'}, widget=widgets.TextInput(attrs={ 'placeholder': '请输入确认密码', 'class': 'form-control' })) def clean_email(self): email = self.cleaned_data['email'] is_exsit = models.UserInfo.objects.filter(email=email) if is_exsit: raise ValidationError('邮箱已经存在!') else: return email def clean_username(self): user = self.cleaned_data['username'] is_exsit = models.UserInfo.objects.filter(username=user) if is_exsit: raise ValidationError('登陆用户名已被使用!') else: return user def clean_nickname(self): nickname = self.cleaned_data['nickname'] is_exsit = models.UserInfo.objects.filter(nickname=nickname) if is_exsit: raise ValidationError('显示名称已被使用!') else: return nickname def clean(self): password = self.cleaned_data.get('password') repeat_password = self.cleaned_data.get('repeat_password') if password != repeat_password: raise ValidationError('确认密码错误') else: return self.cleaned_data
def callback(*args, **kwargs): return djangofields.FileField()
class TestForm(forms.Form): user = fields.CharField( required=True, # 是否为空 max_length=12, # 最大长度 min_length=3, # 最小长度 error_messages={}, # widget=widgets.Select(), # 定制HTML插件 label='用户名', # initial='用户名', # disabled=True, label_suffix=':', ) age = fields.IntegerField( required=True, label='年龄', max_value=12, min_value=1, ) email = fields.EmailField(required=True, label='Email') image = fields.FileField() city = fields.TypedChoiceField( coerce=lambda x: int(x), choices=[( 1, '上海', ), ( 2, '北京', ), ( 3, '武汉', )], initial=2, ) hobby = fields.MultipleChoiceField(choices=[(1, '篮球'), (2, '足球'), (3, '乒乓球')], ) # xdd = fields.CharField( # # widget=widgets.Select(choices=[(1, '张三',), (2, '李四',), (3, '王五',)]) # widget=widgets.CheckboxInput() # ) xdd = fields.MultipleChoiceField( initial=[ 2, ], choices=(( 1, '上海', ), ( 2, '北京', ), ( 3, '天津', )), widget=widgets.CheckboxSelectMultiple, ) # 单radio,值为字符串 address = fields.CharField( initial=2, widget=widgets.RadioSelect(choices=( (1, '上海'), (2, '北京'), )), )
class TestForm(forms.Form): user = fields.CharField( required=True, #判断是否必填 max_length=12, #最大长度 min_length=3, #最下长度 error_messages={}, #错误提示 # widget = widgets.Select(),#widget可以定制HTML插件 label='用户名', # initial='请输入用户名',#设置默认值 disabled=True, ) age = fields.IntegerField(label='年龄', max_value=12, min_value=5, error_messages={'max_value': '输入的值超出限制'}) email = fields.EmailField(label='邮箱', ) #上传文件 # 注:需要PIL模块,Pillow # 以上两个字典使用时,需要注意两点: # - form表单中 # enctype = "multipart/form-data" # - view函数中 # obj = MyForm(request.POST, request.FILES) img = fields.FileField(label='上传文件', ) # city = fields.ChoiceField( # label='城市', # #数据源写在choices里面即可 # choices=[(1,'天津'),(2,'北京'),(3,'陕西')], # #下拉框里面的默认值设定 # initial = 3, # ) city = fields.TypedChoiceField( label='Typed城市', #接收一个参数,将该参数转换为int再返回 coerce=lambda x: int(x), #数据源写在choices里面即可 choices=[(1, '天津'), (2, '北京'), (3, '陕西')], #下拉框里面的默认值设定 initial=3, ) hobby = fields.MultipleChoiceField( label='爱好', choices=[(1, '爬山'), (2, '阅读'), (3, '健身')], #默认值多个,所以可以写列表 initial=[1, 3], ) #下拉单选框的两种写法 selectA = fields.CharField(widget=widgets.Select( choices=[(1, 'winchoo'), (2, 'chason'), (3, '张三')]), ) selectB = fields.ChoiceField(choices=[(1, 'winchoo'), (2, 'chason'), (3, '张三')], ) #下拉多选框的写法 Multiselect = fields.MultipleChoiceField( choices=[(1, 'winchoo'), (2, 'chason'), (3, '张三')], widget=widgets.SelectMultiple(attrs={'class': 'c1'}), #这里的class是自定义属性 ) #单选框checkbox checkboxuser = fields.CharField(widget=widgets.CheckboxInput(), ) #多选框checkbox Multicheckbox = fields.MultipleChoiceField( initial=[2, 'winchoo'], choices=((1, 'chason'), (2, 'winchoo'), (3, 'Milton')), widget=widgets.CheckboxSelectMultiple, ) #单选RadioSelect Radioselect = fields.ChoiceField( choices=((1, '马来西亚'), (2, '美国'), (3, '日本')), initial=2, widget=widgets.RadioSelect, )
class RegisterForm(Form): username = fields.CharField( widget=widgets.TextInput(attrs={'placeholder': '请填写用户名', 'class': "form-control", 'id': "inputUserName"}), label='', label_suffix='', max_length=32, min_length=5, required=True, error_messages={ 'required': "请填写用户名", 'min_length': "用户名长度必须大于5", 'max_length': "用户名长度必须小于32", } ) nickname = fields.CharField( widget=widgets.TextInput(attrs={'placeholder': '请填写昵称', 'class': "form-control", 'id': "inputNickname", 'null': 'true'}), label='', label_suffix='', max_length=32, required=False, error_messages={ 'required': "请填写昵称", 'max_length': "昵称长度必须小于32", } ) avatar = fields.FileField( widget=widgets.FileInput(attrs={'id': "imgSelect", 'null': 'true'}), required=False, ) password = fields.CharField( widget=widgets.PasswordInput(attrs={'placeholder': '请填写密码', 'class': "form-control", 'id': "inputPassWord"}), label='', label_suffix='', max_length=64, min_length=6, required=True, error_messages={ 'required': "请填写密码", 'min_length': "密码长度必须大于5", 'max_length': "密码长度必须小于32", } ) email = fields.EmailField( widget=widgets.EmailInput(attrs={'placeholder': '请填写电子邮箱', 'class': "form-control", 'id': "inputEmail", 'null': 'true'}), label='', label_suffix='', required=False, error_messages={ 'required': "请填写邮箱", 'invalid': '邮箱格式错误', } ) telephone = fields.CharField( widget=widgets.TextInput(attrs={'placeholder': '请输入电话号码', 'class': "form-control", 'id': "inputTelephone"}), label='', label_suffix='', error_messages={ 'required': "请填写手机号码", 'invalid': '请填写正确的手机号码', }, required=True, validators=[RegexValidator(r'^1\d{10}$', '请填写正确的手机号码')], max_length=11, ) gender = fields.ChoiceField( widget=widgets.RadioSelect(attrs={'class': "form-control", 'id': "inputGender", 'null': 'true'}), choices=User.gender_choices, label='', label_suffix='', required=False, ) def clean_username(self): username = self.cleaned_data.get('username') if username: if models.User.objects.filter(username=username).first(): raise ValidationError('此用户名已被注册') return username def clean_email(self): email = self.cleaned_data.get('email') if email: if models.User.objects.filter(email=email).first(): raise ValidationError("此邮箱已被注册") return email def clean_telephone(self): telephone = self.cleaned_data.get('telephone') if telephone: if models.User.objects.filter(telephone=telephone).first(): raise ValidationError("此手机号码已被注册") return telephone
class DetailedForm(forms.Form): """ required:是否必填 error_messages:錯誤提示(要透過{{ obj.errors.user.0 }}調用) widget:訂製html插件(重要) label:訂製標籤名(要透過{{ obj.user.label }}調用) initial:默認值 validators:自訂製驗證規則 disabled:是否禁止編輯 """ user = fields.CharField( required=True, max_length=12, # 最大長度 min_length=3, # 最小長度 error_messages={}, widget=widgets.TextInput(attrs={'n': 123}), # 參數為自定義屬性 label="用戶名", initial='請輸入用戶名', disabled=True, ) age = fields.IntegerField( label="年齡", max_value=1000, # 最大值 min_value=0, # 最小值 error_messages={ 'max_value': '太大了', }) email = fields.EmailField(label="信箱", ) smath = fields.DecimalField() # 小數 file = fields.FileField() city = fields.ChoiceField( choices=[(1, "上海"), (2, "北京"), (3, "南京")], # (value, 顯示文字) initial=3, # 默認value=3 ) hobby = fields.MultipleChoiceField( choices=[(1, "籃球"), (2, "電動"), (3, "小說")], # (value, 顯示文字) initial=[1, 2], ) # date = fields.DateField() # 格式:2015-09-01 # datetime = fields.DateTimeField() # 格式:2015-09-01 11:12 radio = fields.ChoiceField( choices=[(1, 'man'), (2, 'woman')], widget=widgets.RadioSelect(), ) check = fields.MultipleChoiceField( choices=[(1, 'man'), (2, 'woman')], widget=widgets.CheckboxSelectMultiple(), ) from django.core.validators import RegexValidator my = fields.CharField( # 自定義正則一 # validators可設置多個RegexValidator # RegexValidator(正則, 錯誤信息) validators=[ RegexValidator(r"^[0-9]+$", "請輸入數字"), RegexValidator(r"^87[0-9]+$", "請以87開頭") ], ) # 自定義正則二 # fields.RegexField(正則),只可設置單個正則 my2 = fields.RegexField(r"^[0-9]+$", error_messages={ "invalid": "請輸入數字", })
class Register(Form): name = fields.CharField( min_length=6, max_length=16, error_messages={ 'required': '用户名不能为空', 'min_length': '用户名至少6个字符' }, widget=widgets.TextInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) pwd = fields.CharField( max_length=16, min_length=6, error_messages={ 'required': '密码不能为空', "invalid": '不能包含非法字符', 'min_length': '密码至少6个字符' }, widget=widgets.PasswordInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) pwd2 = fields.CharField( max_length=16, min_length=6, error_messages={ 'required': '密码不能为空', "invalid": '不能包含非法字符' }, widget=widgets.PasswordInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) nickname = fields.CharField( max_length=16, min_length=4, error_messages={ 'required': '昵称不能为空', "invalid": '不能包含非法字符' }, widget=widgets.TextInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) email = fields.EmailField( max_length=32, min_length=8, error_messages={ 'required': '邮箱不能为空', "invalid": '请输入正确邮箱' }, widget=widgets.EmailInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) phone = fields.RegexField( '^1\d{10}', error_messages={ 'required': '手机不能为空', "invalid": '请输入正确手机号' }, widget=widgets.TextInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) avatar = fields.FileField(widget=widgets.FileInput( attrs={ 'style': "width:200px;height:200px;opacity:0;position:absolute;top:0" })) piccode = fields.CharField( error_messages={ 'required': '验证码不能为空', "invalid": '请输入正确验证码' }, widget=widgets.TextInput(attrs={ 'class': 'form-control', 'aria-describedby': 'basic-addon1' })) def __init__(self, request, *args, **kwargs): """ 引入request参数 :param request: :param args: :param kwargs: """ super(Register, self).__init__(*args, **kwargs) self.request = request def clean_piccode(self): inputcode = self.cleaned_data['piccode'] turecode = self.request.session['piccode'] if inputcode == turecode: return inputcode raise ValidationError('验证码错误') def clean_pwd2(self): pwd = self.cleaned_data['pwd'] pwd2 = self.cleaned_data['pwd2'] if pwd == pwd2: return pwd raise ValidationError('两次密码不一致')