Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节——表单(Form)基础操作
点击查看教程总目录
1 - 编写表单类
创建新的表单类的代码,一般写到一个专门的
forms.py文件中(一般放在对应的app文件夹下)
在本章第一小节,我们已经展示了如何去创建表单类的代码,这里我们详细看看这些代码
#usr/bin/env python
#-*- coding:utf-8- -*-
from django import forms
class LoginForm(forms.Form):
uid = forms.CharField(label='ID', max_length=10)
password = forms.CharField(label='password', max_length=30, widget=forms.PasswordInput)
首先第1行从django库中导入了forms库,
我们创建表单时,常常需要用到forms中的:
forms.Form: 必用,继承该表单类去创建自己需要的表单- 各种
Field: 几乎必用,定义自己表单类中需要的字段 - 各种
widget: 常用,定义表单字段的一些规则。
第3行继承forms.Form编写自己的表单类LoginForm。
新表单类的命名一般以Form结尾,没有什么太多的要求,按常规的命名类的规则来就行,表达清楚该表单的功能和意义即可。
第4、5行设置表单需要的字段,其中的Field和之前models中的Field十分相似,写法上也差不多。
使用时主要的区别有:
- 标签文本,
forms中的Field用label指定,models中的Field用verbose_name指定, forms中的Field比models中的Field多了个widget属性
这里第5行中的widget属性forms.PasswordInput代表这是个密码字段,填写时会隐藏其输入的内容
2 - 操作表单
新建表单对象,即实例化表单:
form = LoginForm()
这是一个没有数据的空表单,用户提交表单信息的页面,一般使用的是这样的空表单。
通过render方法传递给模板进行渲染,比如本章第一节中的代码:
return render(request, 'login.html', {'form': form})
当用户填写表单信息之后,提交表单时,必须使用POST方法提交,
此时视图中,可以直接使用表单数据来新建一个表单对象,代码如下
form = LoginForm(data=request.POST)
不过用户提交的表单信息不一定就是符合规则的,这个时候需要对表单进行一个数据检查
form.is_valid()
使用表单类的is_valid方法即可,返回值为True则代表其数据是通过验证的。
通过验证后,我们将可以使用表单类的cleaned_data属性,找到所有已验证的表单数据。
而表单类的cleaned_data属性,是一个字典,获取其中的属性,就是很简单的了:
uid = form.cleaned_data["uid"]
3 - 渲染表单
视图方法给Django Template(模板)中传入一个form对象后,想要在模板中渲染出来,
可以直接使用{{ form }},该语法将适当地渲染form对象的和元素。
除了<label>/<input>对,还有其他的输出选项:
{{ form.as_table }}将把它渲染成包含在<tr>标签中的表格单元格{{ form.as_p }}将把它们包装在<p>标签中{{ form.as_ul }}将把它们包装在<li>标签中
注意:表单的渲染输出不包括周围的<form>、<table>或者<ul>标记,也不包括表单的submit控件,这些需要我们去写。
补充:其实直接使用{{ form }}和使用{{ form.as_table }}是一样的,前者是通过默认调用后者实现的。
这里我们举个例子,具体展示下这三个输出方法的区别
使用本章第一节中展示的代码,临时性的修改下其中的login.html如下,来观察下这几种渲染方式的不同
<html>
<head>
<title>login</title>
</head>
<body>
<h1>Use form.as_table </h1>
<form method="post" action="{% url "login" %}">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<p><input type="submit" value="Log in" /></p>
</form>
<h1>Use form.as_p</h1>
<form method="post" action="{% url "login" %}">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="Log in" /></p>
</form>
<h1>Use form.as_ul</h1>
<form method="post" action="{% url "login" %}">
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<p><input type="submit" value="Log in" /></p>
</form>
</body>
</html>
其渲染后的效果如下图:

下面我们细看一下这三种方法渲染后输出的HTML代码
{{ form.as_table }}:
<tr><th><label for="id_id">ID:</label></th><td><input type="text" name="id" maxlength="30" required id="id_id"></td></tr>
<tr><th><label for="id_password">Password:</label></th><td><input type="password" name="password" maxlength="30" required id="id_password"></td></tr>
{{ form.as_p }}:
<p><label for="id_id">ID:</label> <input type="text" name="id" maxlength="30" required id="id_id"></p>
<p><label for="id_password">Password:</label> <input type="password" name="password" maxlength="30" required id="id_password"></p>
{{ form.as_ul }}:
<li><label for="id_id">ID:</label> <input type="text" name="id" maxlength="30" required id="id_id"></li>
<li><label for="id_password">Password:</label> <input type="password" name="password" maxlength="30" required id="id_password"></li>
Django笔记&教程 6-2 表单(Form)基础操作的更多相关文章
- DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中
绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form
添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...
- HTML笔记(五)表单<form>及其相关元素
表单标签<form> 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入信息的元素. 输入标签<input> 输入标签的输入类型由其类型属性type决定.常见的输入 ...
- Django笔记&教程 3-1 模板(Template)基础
Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Django学习笔记(3)——表单,测试和模板语法的学习
一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...
- amazeui学习笔记--css(HTML元素3)--表单Form
amazeui学习笔记--css(HTML元素3)--表单Form 一.总结 1.form样式使用:在容器上添加 .am-form class,容器里的子元素才会应用 Amaze UI 定义的样式. ...
- Laravel教程 七:表单验证 Validation
Laravel教程 七:表单验证 Validation 此文章为原创文章,未经同意,禁止转载. Laravel Form 终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其他的东西. 就 ...
- Laravel教程 六:表单 Forms
Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate ...
- HTML+CSS笔记 表格,超链接,图片,表单
表格 给表格加入CSS样式,添加表格边框 语法: <style type="text/css"> table tr td,th{border:1px solid #00 ...
随机推荐
- 三、mybatis多表关联查询和分布查询
前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...
- 5分钟实现用docker搭建Redis集群模式和哨兵模式
如果让你为开发.测试环境分别搭一套哨兵和集群模式的redis,你最快需要多久,或许你需要一天?2小时?事实是可以更短. 是的,你已经猜到了,用docker部署,真的只需要十几分钟. 一.准备工作 拉取 ...
- 查看显卡报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
当输入nvidia-smi时出现 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make ...
- 程序员微机课系列—我的nodejs多版本管理方法
nodejs的多版本配置对于我来说一直都是一个较为头疼的事情.本人的开发工作会涉及electron以及前端,对于工作中使用的npm包(点名node-sqlite3和node-sass)在某些情况下,会 ...
- gRPC,爆赞
原文链接: gRPC,爆赞 gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用. 作为一名程序员,学就对了. 之前用 Python 写过一些 gRPC 服务, ...
- PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发.功能完备. 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架.基础模型库.端到端开发 ...
- 题解 Crash 的文明世界
题目传送门 题目大意 给出一个\(n\)个点的树,和常数\(k\),对于\(\forall i\in[1,n]\),求出: \[\sum_{j=1}^{n} \text{dist}(i,j)^k \] ...
- SpringBoot之日志注解和缓存优化
SpringBoot之日志注解和缓存优化 日志注解: 关于SpringBoot中的日志处理,在之前的文章中页写过: 点击进入 这次通过注解+Aop的方式来实现日志的输出: 首先需要定义一个注解类: @ ...
- docker中Jenkins启动无法安装插件,版本过低
一.问题现象: 使用docker启动jenkins,在jenkins启动后却无法安装jenkins的插件,一直提示安装失败且从log看到提示信息显示为需要升级jenkins的版本 二.原因分析: 在使 ...
- 初入CTF(封神榜第一关)
注:网址中的%20是空格的意思 1判断是否存在注入点 构造?id=1 and 1=1(不报错) 构造?id=1 and 1=2(报错或者不显示内容) 报错说明and后面的语句被识别 2判断回显字段的长 ...