前言在上一篇文章中,我们尝试了以下DjangoForm组件。本文将带你了解DjangoForm组件(介绍)。小伙伴可以一起看看。但是您可能有很多疑问,不知道如何使用它。并且知道Form组件的作用。生成HTML标签。验证提交的数据。保留预提交数据。那么这篇文章就接上一篇的内容,让我们来学习一下下面这些DjangoForm组件的使用方法。Form组件的理解并没有使用Form组件。一般来说,如果我们写输入框,在Html中,一般是这样写的。代码...
...使用Form组件实现时效果在使用Form组件时,我们通常需要定义Form类。这个Form,里面的字段,可以理解为input标签,只不过是写在后端的。表单类fromdjango.formsimportFormclassLoginForm(Form):uname=fields.CharField(label="username")upwd=fields.CharField(label="password")views.pyfromdjango.shortcutssimportrenderdeflogin(request):form=LoginForm()returnrender(request,"login_f.html",{"form":form})html...{{form.uname}}{{form.uname.errors.0}}
{{form.upwd}}{{form.upwd.errors.0}}
...小总结可以发现我没有写输入代码,而是直接调用了后台表单。出来。可以发现Form类生成的Html和自己写的Html基本一致,生成的id是id+<字段名>。Form生成的Html和手工写的Html是通过对应的图来确定的,input标签直接通过后端的form.生成。好了,至此,Form类就确定了,就是为我们生成输入标签。Form的使用有以下几个步骤。1、创建一个Form类,尽量和模型对齐。classLoginForm(Form):uname=fields.CharField(label="username")upwd=fields.CharField(label="password")因为Form提交的数据可以转成dict,key就是name表格字段。如果Form字段和models匹配,直接models..objects.create(**dict)。2.如果是GET请求,实例化Form对象,返回页面。deflogin(request):ifrequest.method=='GET':form=LoginForm()returnrender(request,"login_f.html",{"form":form})3.如果是POST请求,在实例化Form时object,传入request.POST,request.FILES,验证。#然后上面elifrequest.method=="POST":form=LoginForm(request.POST,request.FILES)###########验证数据ifform.is_valid():#VerificationSuccess#验证成功后数据,key是Form类的字段名print(form.cleaned_data)#{'uname':'1212','upwd':'1212'}returnHttpResponse("ok")#验证失败#虽然返回页面还是#但是form会保存最后一个输入框的内容,同时也会显示错误信息returnrender(request,"login_f.html",{"form":form})4.前端使用form对象从后端传过来的。方法一、点击每个字段方法二、循环表单对象表单对象可以循环,循环中的每个表单对象就是每个字段对象。FormfieldForm组件主要是帮我们做校验,所以当然有很多参数比如:是否可以为空。标签显示的内容。etc...公共字段Field类是所有字段的基类Field参数如下required=True,是否允许为空,默认为True,不能为空widget=None,插件,显示的具体输入信息label=None,label,label显示的内容help_text="",帮助信息(显示在label旁边)error_massages=None,错误信息{"required":"cannotbeempty",...}show_hidden_??initial=False,是否在当前插件后添加一个隐藏有默认值的插件(可用于验证两次输入是否一致)validators=[],自定义验证规则函数localize=False,是否支持localizationdisabled=False,是否编辑label_suffix=None,Label内容后缀CharField(Field),比较常用的字段之一min_length=None,最小长度max_length=None,最大长度strip=True,是否去除输入空白IntegerField(Field)max_value=None,最大值min_value=None,minimumvalueDecimalField(IntegerField)max_value=None,最大值min_value=None,最小值max_digits=None,最大长度decimal_places=None,小数位长度DurationField(字段)RegexField(CharField)EmailField(CharField)FileField(字段)ImageField(FileField)URLField(字段)BooleanField(字段)NullBooleanField(BooleanField)...字段比较多,这里就不赘述了。详情见官网:https://docs.djangoproject.com/zh-hans/2.0/ref/forms/api/#django。forms.BoundField多选字段ChoiceField(Field)...choices=()#选项,如:choices=((1,'一等舱'),(2,'二等舱'),)required=True#必填widget=None#Plugin,默认选择插件label=None#标签内容initial=None#初始值help_text=''#帮助提示来自django.forms.modelsimportModelChoiceField#单选ModelChoiceField(ChoiceField)queryset=None#查询数据库中的数据empty_label="--------"#默认空显示内容to_field_name=None#HTML中value的值对应的字段limit_choices_to=None#ModelForm中queryset的二次筛选#多选fromdjango.forms.modelsimportModelMultipleChoiceFieldModelMultipleChoiceField(ModelChoiceField)...widget参数对应插件即使字段是CharField,但最终效果还是以插件为准!)DateInput(DateTimeBaseInput)DateTimeInput(DateTimeBaseInput)TimeInput(DateTimeBaseInput)CheckboxInputSelectNullBooleanSelectSelectMultipleRadioSelectCheckboxSelectMultipleFileInputClearableFileInputMultipleHiddenInputSplitDateTimeWidgetSplitHiddenDateTimeWidgetSelectDateWidgetwidget示例fromdjango.formsimportfields,widgetsfromdjango.formsimportFormuser=fields.CharField(initial=2,widget=widgets.RadioSelect(choices=((1,#'),(1,#'),(一班)user=fields.ChoiceField(choices=((1,'一等舱'),(2,'二等舱'),),initial=2,widget=widgets.RadioSelect)#多选选择,值为列表用户=字段。MultipleChoiceField(choices=(((1,'第一类'),(2,'第二类'),),initial=[1,],widget=widgets.SelectMultiple)#从数据库中获取多选#方法一来自django。formsimportFormfromdjango.core.validatorsimportRegexValidatorclassForm类(Form):user=fields.ChoiceField(#choices=((1,'第一类'),(2,'第二类'),),initial=2,widget=widgets.Select)def__init__(self,*args,**kwargs):super(MyForm,self).__init__(*args,**kwargs)#self.fields['user'].widget.choices=((1,'oneclass'),(2,'二等'),)#orself.fields['user'].widget.choices=models.Classes.objects.all().value_list('id','caption')#方法2来自django.formsimportmodelsasform_modelclassForm类(Form):depart=form_model.ModelMultipleChoiceField(queryset=models.Depart.objects.all())总结本文首先从入门的角度讲一下如何使用和使用DjangoForm组件,使用Form组件和不使用Form组件的区别,再说下面的Form。使用。首先,当发出GET请求时,页面被返回。当发起POST请求时,对数据进行校验,判断是否符合规则。如果失败,则返回错误信息,如果成功,则继续写入数据库。最后列出了常用的Form字段,以及如何使用多选字段。