用户提交信息,通常是经过表单实现,css
数据操做提交,通常是经过表单作的
表单提交信息到服务器而后服务器进行处理
django forms是Django的表单处理库。依赖HttpRequest,它具备以下特色:html
(1)、快速自动生成HTML表单前端
(2)、表单数据校验python
(3)、错误信息提示django
(4)、自动转换为python数据格式bootstrap
html
<form action=''>
<form>
html的表单
仅仅为一个表单,不带验证,数据处理等功能
在Django 的 form中,是一个通过封装的表单对象,能够经过它生成用户想要填写的表单,有强大的功能
一、默认提供的表单样式太丑了,不符合个人项目需求能改吗?
能够的
二、为何要使用django的表单呢?
在Django 的 form中,是一个通过封装的表单对象,能够经过它生成用户想要填写的表单,有强大的功能
自带有验证,数据处理的功能
三、django的form是html中的form吗?
Django的form最终会生成html的form,但
有区别,功能更增强大,做用不一样,
modelForm:是和Model绑定的,数据模型,modelForm会自动匹配model里面的字段,而后生成相应的html表单,相关验证和处理的功能能在这个过程完成
Form:自定义Form
能够根据本身的须要设定本身的Form
一个用户可能会有多个表单,因此采用一个单独的form.py模块来进行管理
使用的时候须要引用
如 form form import FeedbackForm
from models importFeedback
classFeedbackForm(forms.ModelForm):
classMeta:
model =Feedback 在这里设置须要绑定的model
fields = ('name','email','message',) 指定显示字段信息
html中
{{ feedback_form.as_p }}以p标签的方式生成
<body>
<formmethod='post'>
{{ feedback_form.as_p }}
没有生成form须要本身加上去
<inputtype='submit'value='Send'>
</form>
</body>
表单验证不经过,会把错误信息直接返回给页面
feedbacj_form = FeedbackForm(request.POST) ????
model里面的EmailField能够验证邮箱格式
form 模型使得保存model数据很是方便
a = Feedback()
a.name = 'sss'
a.email = 'fff'
a.save()
feedback_form.save() 表单和model是绑定的,调用这个方法时,会让绑定的
model进行处理,保存数据
url(r'^update/(?p<id>\d)/$','form.views.update',name='update')
instance为实例参数,告诉form当前的操做对象
feedback_form = FeedbackForm(instance=feedback)传入实例,表单进行分析,
生成相应html代码
若是不这么绑定直接生成的话保存后会生成新的数据,若是绑定,就是对所绑定的实例进行修改
forms.py太丑,能够直接在form 模型上添加css和js属性,能够和bootstrap实现form界面
html当中提示的内容placeholder显示出来
多对多能够多选
多选状况:choices=((1,'aaa'),(2,'bbb'))
choices = ((c.id,c.name) for c in Category.objects.all())
feedback_form.fields['subject'].choices = choices
须要在form里面指定默认的属性
Form比modelForm更方便实现前端的页面,方便的添加css和js.
没有写action默认提交给当前页
用initial进行初始化
验证顺序:
默认验证
clean_字段名()
clean()
form当中定义错误信息
error_messages={'invalid':'请输入正确的Email格式'}
当表单以method = 'post'提交的时候会出现的问题,加一个crsf就能够了
<form method="post">
{% csrf_token %}
email = feedback_form.cleaned_data['email']
date是日期,data是数据
若是一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。 这是一个包含干净的提交数据的字典,咱们要报取数据的时候,就用这个,如上面代码中的print fr.cleaned_data['ip']