form表单

用户提交信息,一般是通过表单实现,

数据操作提交,一般是通过表单做的
表单提交信息到服务器然后服务器进行处理
 
 

django forms是Django的表单处理库。依赖HttpRequest,它具有如下特点:

(1)、快速自动生成HTML表单

(2)、表单数据校验

(3)、错误信息提示

(4)、自动转换为python数据格式

 
 
html
<form action=''>
<form>
 
html的表单 仅仅为一个表单,不带验证,数据处理等功能
在Django 的 form中,是一个经过封装的表单对象,可以通过它生成用户想要填写的表单,有强大的功能
 
1、默认提供的表单样式太丑了,不符合我的项目需求能改吗?
可以的
 
2、为什么要使用django的表单呢?
在Django 的 form中,是一个经过封装的表单对象,可以通过它生成用户想要填写的表单,有强大的功能
自带有验证,数据处理的功能
 
3、django的form是html中的form吗?
Django的form最终会生成html的form,但有区别,功能更加强大,作用不同,
 
modelForm:是和Model绑定的,数据模型,modelForm会自动匹配model里面的字段,然后生成相应的html表单,相关验证和处理的功能能在这个过程完成   
Form:自定义Form
可以根据自己的需要设定自己的Form
 
一个用户可能会有多个表单,所以采用一个单独的form.py模块来进行管理
使用的时候需要引用
如 form form import FeedbackForm
 
  1. from models importFeedback
  2. classFeedbackForm(forms.ModelForm):
  3. classMeta:
  4. model =Feedback 在这里设置需要绑定的model
  5. fields = ('name','email','message',) 指定显示字段信息
 
html中
{{ feedback_form.as_p }}以p标签的方式生成
  1. <body>
  2. <formmethod='post'>
  3. {{ feedback_form.as_p }} 没有生成form需要自己加上去
  4. <inputtype='submit'value='Send'>
  5. </form>
  6. </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 action="{% url 'comment_post' %}" method="post">
{% csrf_token %}这个装饰器的作用是 不再做远程表单提交验证
当form表单,method提交为post的时候会进行一个token验证,所以添上{% csrf_token %}这个才行
http://www.ziqiangxuetang.com/django/django-csrf.html
 
如果一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。 这是一个包含干净的提交数据的字典,我们要报取数据的时候,就用这个,如上面代码中的print fr.cleaned_data['ip']
 
 
 
 
 
 
 
 
 
 





原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749568.html