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中的Fieldlabel指定,models中的Fieldverbose_name指定,
  • forms中的Fieldmodels中的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)基础操作的更多相关文章

  1. DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中

    绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...

  2. DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form

    添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...

  3. HTML笔记(五)表单<form>及其相关元素

    表单标签<form> 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入信息的元素. 输入标签<input> 输入标签的输入类型由其类型属性type决定.常见的输入 ...

  4. Django笔记&教程 3-1 模板(Template)基础

    Django 自学笔记兼学习教程第3章第1节--模板(Template)基础 点击查看教程总目录 1 介绍 模板文件:让Django能够自动生成html代码 作为一个web框架,Django需要需要在 ...

  5. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  6. Django学习笔记(3)——表单,测试和模板语法的学习

    一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...

  7. amazeui学习笔记--css(HTML元素3)--表单Form

    amazeui学习笔记--css(HTML元素3)--表单Form 一.总结 1.form样式使用:在容器上添加 .am-form class,容器里的子元素才会应用 Amaze UI 定义的样式. ...

  8. Laravel教程 七:表单验证 Validation

    Laravel教程 七:表单验证 Validation 此文章为原创文章,未经同意,禁止转载. Laravel Form 终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其他的东西. 就 ...

  9. Laravel教程 六:表单 Forms

    Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate ...

  10. HTML+CSS笔记 表格,超链接,图片,表单

    表格 给表格加入CSS样式,添加表格边框 语法: <style type="text/css"> table tr td,th{border:1px solid #00 ...

随机推荐

  1. Dapr + .NET Core实战(六)绑定

    什么是绑定 处理外部事件或调用外部接口的功能就是绑定,绑定可以提供以下好处: 避免连接到消息系统 ( 如队列和消息总线 ) 并进行轮询的复杂性 聚焦于业务逻辑,而不是如何与系统交互 使代码不受 SDK ...

  2. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现

    一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...

  3. 【数据结构与算法】二叉树的 Morris 遍历(前序、中序、后序)

    前置说明 不了解二叉树非递归遍历的可以看我之前的文章[数据结构与算法]二叉树模板及例题 Morris 遍历 概述 Morris 遍历是一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1 ...

  4. SpringBoot如何实现定时任务

    写在前面 SpringBoot创建定时任务的方式很简单,主要有两种方式:一.基于注解的方式(@Scheduled)二.数据库动态配置.实际开发中,第一种需要在代码中写死表达式,如果修改起来,又得重启会 ...

  5. Conda 命令

    Conda 命令 1 检验当前conda的版本 conda -V 2 conda常用的命令 查看已有的虚拟环境 conda env list 创建虚拟环境和删除虚拟环境 anaconda命令创建pyt ...

  6. pycharm中安装和使用sqlite过程详解

    创建Django项目,添加app 使用虚拟环境 项目创建默认使用的Django数据库是sqlite 配置静态文件 STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀 S ...

  7. 盘点一下Redis中常用的Java客户端,或者咱们手写一个?

    Java中那些Redis的客户端 前面我们的所有操作都是基于redis-cli来完成的,那么我们要在Java中操作Redis,怎么做呢?首先我们先来了解一下Redis Serialization Pr ...

  8. TStor-OneCOS ,主打专一海量对象场景

    ​谁能与你厮守终身 生活在21世纪,最常见的事莫过于更新换代了,找一款能长久适用的产品,是很多人都希望拥有的,特别是针对于云服务产品,而对象·混合云存储新增 TStor-OneCOS 就是这样一款可以 ...

  9. 【UE4】虚幻引擎技术直播汇总(含中英文直播)

    B站虚幻引擎官方账号 中文直播 [中文直播]第35期 | 使用GIS在UE中创造真实地球风貌 | Epic 周澄清 [中文直播]第34期 | 包教包会的Epic MegaGrants申请之道 | Ep ...

  10. 【c++ Prime 学习笔记】第6章 函数

    6.1 函数基础 函数定义包括:返回类型.函数名字.由0个或多个形参组成的列表以及函数体 通过调用运算符()来执行函数,它作用于一个表达式,该表达式是函数或函数指针.圆括号内是一个逗号隔开的实参列表, ...