在django中实现表单
http://forreal.blog.51cto.com/3205122/586035
最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得。
一,创建一个表单
创建一个Form表单有两种方式:
第一种方式是继承于forms.Form,的一个子类,通过在form中选择你需要的类型来规定表单之
中字段的类型
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(required=False)
其中 django 内置了很多的字段,让开发者可以直接使用,并且内置了这些字段的检验使站点中的表单数据检测变得方便,也提供了一些可选择的检验规则如required=False等,具体的可以去Django 官网查询API。
第二种 是直接利用数据库中以有的表来生成表单项, 这对于一个管理系统类型的网站 比较有用,因为如果一个站点有大量的实体数据需要让用户输入,那么就不必重新花费时间来定义表单,只需要直接的和 model 进行关联就可以了如:
class BookForm(ModelForm):
class Meta:
model = Book
这样就可以 直接将 book 中的所有字段 直接生成一张 与之对应的表单,也许你不想所有的模型中的字段用户都可以填写,那么你可以用
class Meta:
model = Author
fields = ('name', 'title')
class Meta:
model = Author
exclude = ('birth_date',)
exclude 属性来规定哪些字段你不想加入在表单之中。
fields属性来规定哪些你要加入表单之中,当然两个属性,你只要设定一个就可以了
二,修饰这个表单
因为用django自动生成的表单,实现的内容很多是你不想要的,所以要创造一个独特的表。
改变字段在模板中显示的类型
你继承于ModelForm来创建一个表单的话,Django会自动的将外键字段转化成一个select的控件,并且通过下拉框来选择一个值,这可能是你不想要的,因为你可能不希望用户来填写外键的内容,这些外键的内容是系统自动关联分配的,所以,你就必须更改表单项的实现方式。
model = Author
fields = ('name', 'title', 'birth_date')
widgets = {
'name': Textarea(attrs={'cols': 80, 'rows': 20}),
}
通过widgets这个参数,手动的设定字段以何种input类型显示
更改报错信息
在django表单系统之中,如果在处理表中中 使用 is_valid()
方法并且表单检测发现表单内容不符合规则,那么他将返回一个表单,表单之中没一样中 form.name.errors 就是报错信息,虽然现在在服务器端检验表单字段的实用价值已经越来越小了,但是 俗话说, 永远不要相信前台脚本,永远不要相信用户,他们很可能利用你没有后台检验的功能而 搞出很多的事情来,所以尽管前台已经做了检验,但是后台仍然要做一次检验,更改默认的报错信息是这样的
name = forms.CharField(error_messages={'required': 'Please enter your name'})
在创建这个 表单的时段的时候 传入如下的参数,就可以修改报错信息,当然你必须知道具体错误的名称 如“requeired”这些名称可以在API 中找到
三,使用这个表单
在视图中使用
在视图中使用一个表单 无非是两种功能,一个是创建一个表单让用户来填写信息,另一个是处理表单中的数据。
创建一个表单 就是直接创建一个 实体表单的对象
form = ContactForm(),里面有几个比较重要的参数:auto_id=False
这个参数 主要是表示 是否在表单中生成 id ,因为有的时候你不想让你每个表单的字段都对应一个id, 如果生成 默认id是 id_form字段名字
设置默认值
可以在创建 表单对象时传入如下参数initial={}
这是一个字典参数,对应每个字段的默认值, 可以在定义表的时候在没定义一个时段 中添加 initial='http://' 来设定默认值
更新数据
你可能需要 用一个 model实例来初始化他,这样就可以达到表单更新数据
f = ArticleForm(instance=a) 其中 a 是article 的一个model实例。
提取数据
在 处理 post 请求时候, 通过 f = ArticleForm(request.POST)来获取一个填有用户数据的form
在调用了 is_valid 方法以后 就可以通过 f.cleaned_data ,返回一个 装有数据的字典
总结:
上面直接 介绍很少的 form 的功能,只是让大家了解一下 django form,具体的要去官方API介绍还可以,英文也比较好理解,就我对 django表单而言, 我认为它是方便好用的,但是尽量大家不要过分的依赖django所提供的功能,尽管他提供了 强大的功能,很多事情还是要一步一步来,过分的依赖 它提供的功能,会造成你整个的系统变得非常不灵活。
在django中实现表单相关推荐
- Django中的表单如何使用? Django如何验证前端发来的数据? ✧*。٩(ˊᗜˋ*)و✧*。 Django初体验
文章目录 前期准备 前端准备 表单基础使用 创建表单 表单类型 Field CharField(Field) IntergerField(Field)与 FloatField(Filed) Decim ...
- django中处理表单实例
http://bio.rusaer.com/archives/287 一,创建一个搜索表单 在网站中经常用到的就是表单,通过表单可以获得用户的信息,进行查询,进行添加,是一个很好的交互方式,下面就以最 ...
- Django基础11(Django中form表单)
Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入 ...
- django中form表单post无法提交
报错403:Forbidden (CSRF token missing or incorrect.) 解决方法 方法一: 把settings.py文件中含有csrf那一行注释掉 方法二: 1.导入cs ...
- Django中 form表单的使用
http://blog.csdn.net/tonyfavor/article/details/78220466
- django之Form表单
HTML表单 在HTML中,表单是<form>...</form> 之间元素的集合,它们允许访问者输入文本.选择选项.操作对象和控制等等,然后将信息发送回服务器. 某些表单的元 ...
- django系列10 --- 表单
django系列8 --- 接收.处理.响应客户在界面的输入 前言 一.html 表单 1.1 get 和 post 方法 二.django在表单中的角色 三.django中的表单 四.构建一张表单 ...
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- Django的Form表单
Django的Form表单 Django Form Form介绍 Form 表单是在前端向后端提交数据最常用的方式,同时在好多场景下都需要对用户的输入进行校验. 以注册为例,Form 需要的三件事: ...
最新文章
- WIN7中 HttpListener 拒绝访问 异常解决 C#
- 知乎专栏应用客户端源码项目
- spring Boot Actuator使用
- java 反射机制_详解Java中的反射机制的优缺点
- 用内卷搞垮团队!您可真行
- BGP——Route-map扩展(讲解+配置)@
- 快递送不上门,谁的锅?
- centos6.5远程桌面连接(VNC\SPice)
- 商品二因素、劳动二重性
- MATLAB R2021b v9.11.0.1769968中文版for Mac
- c语言数组元素前移后移,如何将一个数组的元素循环左移?
- windows 下 新建 点开头的文件和文件夹
- android拼音书写格式,Android自定义带拼音音调Textview
- android动画入门
- java 短信批量发送_Redis实现订阅发布与批量发送短信
- JAVASE基础(十)
- 量化投资可转债策略--源代码
- centos7.2 下 ffmpeg交叉编译(安卓版x86_64)
- Spring Cloud zuul自定义异常信息
- coreldraw带圈字符_coreldraw中如何使字体围绕一个圆形排列?