Django form模块使用心得
最近用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模块使用心得的更多相关文章
- 利用django form 模块处理post请求
在django框架中,利用 form 模块处理post请求提交的数据,可以大大提高开发效率,减小代码冗余度,提高性能 models.py 中: from django.db import models ...
- django form表单验证
一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...
- Python Web框架篇:Django Form组件
Form简介 在HTTP中,表单(form标签),是用来提交数据的,其action属性说明了其传输数据的方法:如何传.如何接收. 访问网站时,表单可以实现客户端与服务器之间的通信.例如查询,就用到了表 ...
- Django form表单
Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...
- django Form组件
django Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建 ...
- Django学习之六:Django 常用模块导入记忆
Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls ...
- pythonのdjango Form简单应用。
Form表单有两种应用场景: 1.生成HTML标签. 2.验证输入内容. 如果我们在django程序中使用form时,需要在views中导入form模块 from django import form ...
- Django Form和ModelForm组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- 9.24 Django Form组件
2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...
随机推荐
- C4.5算法总结
C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目标是通过学习, ...
- Windows下MongoDB安装及创建用户名和密码
下载MongoDB的安装文件https://www.mongodb.com/download-center#community,选择合适的版本(注:本人选择的是3.2.6) 下载完MongoDB.ms ...
- 转:Emmet 学习之路 - 2 基本语法
http://blog.csdn.net/jizhongchun/article/details/8472755 导读:Emmet的基本语法.学习步骤是:1 基本语法: 2 html命令: 3 css ...
- Mysql命令-以NULL做where条件过滤时应该写 IS NULL;
以NULL做where条件过滤时应该写 IS NULL;SELECT * FROM pet WHERE death IS NULL; SELECT * FROM pet WHERE death IS ...
- 如何play billard
怎样打台球?(一) 首先,要打好台球,必须要做好准备:1.要有自己的专杆,每日用不同杆的人,台球水平必定一般.2.精神状态度要好,睡眠不足或心里有事儿,不要打台球.记住,台球是专注度要求极高的运动.3 ...
- plsql找外键约束关联的表的方法
直接Ctrl + 鼠标左键 表名 就可以找到参照表(关联表)的名称 下面的是复杂的方法 这个就是关联的表 这里右键查看 可以查看到参照的表
- 创业手记 Mr.Hua
<MR.HUA 创业手记>这本书期盼了很久,也看了很久,每每回味都是意犹未尽,仔细研读,真有醍醐灌顶之意.如果说没有跟Mr.Hua结识,那真该庆幸自己得以拜读.我把自己觉得华哥不错的句子摘 ...
- CF History(区间合并)
这其实是一个简单的区间合并问题,但是我们第一交是过了,后来学长rejudge,我们又TLE了,这一下不仅耽误了我们的时间,也波动到了我们的心情,原先时间是2s,(原oj就是2s),后来改成了1s,我用 ...
- 更少的直接百度,更多的取看API
很多时候我们会对于一个jar包中的一个类的某个方法犯迷糊 我们不知道传进去什么样子的参数,这个方法的返回值到底是什么样的. 更多的时候我们不知道这个jar中有没有我们想要的这个方法. 很多时候以前我都 ...
- 要你的祝福.lrc
要你的祝福(电影<我是路人甲>插曲 试听版) - 李潇潇 午夜的温度慢慢起舞 穿梭的人潮有些荒芜 开始欢呼 开始麻木 谁被谁在安抚 落单的幸福变得模糊 孤单的城市独自起舞 也许满足 也许糊 ...