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 form模块使用心得相关推荐

  1. python提交表单无效_使用Django Form解决表单数据无法动态刷新的两种方法

    一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为"多对多" from django.db import models class Class ...

  2. Django form表单

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  3. Django Form和ModelForm组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  4. Django - Form和ModelForm

    一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <! ...

  5. Django Form表单组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  6. 005:Django Form请求

    本章知识点 Django 请求 Django Form表单 请求与相应 知识点讲解 1. Django 请求 传递数据的方式 Form表单 Ajax Url get请求 我们研究request参数 在 ...

  7. Django日志模块配置

    django日志模块 日志模块工作流程 产生日志(日志实例) 渲染格式(格式化) 匹配过滤(过滤器) 持久化(处理器) 格式器formatter 关键词 描述 asctime 时间(2018-01-0 ...

  8. [py][mx]django form验证-给db减压

    django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...

  9. python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...

    工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取. form.py为: class objectF ...

最新文章

  1. 人工智能正在向具有“高情商”发展
  2. 关于modelsim 6.4a遇到的问题
  3. Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
  4. linux查看 idt日志,实现RCP的日志管理
  5. 蓝牙适配器 能同时接多少个设备_便携音箱也能有立体环绕声,JVC智能蓝牙颈挂音箱体验...
  6. fpga加载程序慢_可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(一)...
  7. idea建springcloud项目_idea创建springcloud项目图文教程(EurekaServer注册中心)
  8. 要获取NAT之后的外网IP地址
  9. ae去闪插件deflicker使用_夜晚视频灯光去闪烁 Deflicker插件
  10. get 和 post 区别
  11. vue中使用萤石云播放视频
  12. linux开发者的一天
  13. pandas使用read_csv函数读取文件的前N行数据并保留表头、pandas使用read_csv函数读取制表符分割的文件(tab-delimited)、自定义设置sep参数
  14. 【opencv4.3.0教程】08之图像掩膜(Mask)操作与执行时间
  15. OSI七层模型 (详细讲解,看这一篇就够了)
  16. Mac M1 安装Maven
  17. REST API规范
  18. 2022.12.16 英语单词背诵
  19. ajax回调方法名使用什么事件,ajax的回调函数和匿名函数
  20. 使用EA绘制UML状态机图

热门文章

  1. OEA中的AutoUI重构(1) - Command自动生成
  2. 消除CDH5.2 Accumulo Under-Replicated Blocks
  3. GUI Design Studio设计实例(附视频) :快速入门
  4. (转载)Http Module 介绍
  5. VB连接SQL2000数据库代码
  6. 问题六十六:怎么用ray tracing画CSG(Constructive Solid Geometry 构造实体几何)图形
  7. 魔法方法——Python
  8. Latex——从基础表到进阶表的讲述
  9. C++第五章课后习题13
  10. 大数据智能营销有什么优势