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. React-高阶函数_函数柯里化

    高阶函数_函数柯里化 高阶函数(定义) 如果一个函数符合下面两个规范,就是高阶函数: 如果A函数,接收的参数是一个函数,那么A就是一个高阶函数(比如数组方法arr.map()接收的就是一个处理item ...

  2. Docker小白到实战之Docker Compose在手,一键足矣

    前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...

  3. SPOJ16636 Journey IE2

    SPOJ16636 Journey IE2 更好的阅读体验 在Byteland有n个城市,编号从1到n.这些城市由m条双向道路网络连接.众所周知,每一对城市最多只能由一条道路连接. Byteman最近 ...

  4. Nginx安装及核心配置解析

    安装 使用yum进行安装 yum install -y nginx 查看nginx的安装位置 whereis nginx 启动测试 nginx 核心配置文件结构 读取Nginx自带的Nginx配置文件 ...

  5. C 库函数源码

    github URL git://sourceware.org/git/glibc.git 码云 URL https://gitee.com/jason.R.xie/glibc.git

  6. 【UE4 调试】C++ 常见编译 warnnings/errors

    error LNK2019: unresolved external symbol "" referenced in function 描述 Link错误.无法解析的外部符号 解决 ...

  7. 权限管理RBAC模型概述

    一.什么是RBAC模型 RBAC模型(Role-Based Access Control:基于角色的访问控制)模型是比较早期提出的权限实现模型,在多用户计算机时期该思想即被提出,其中以美国George ...

  8. [no_code][Alpha]发布声明报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 发布声明 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...

  9. BUAA SE | 提问回顾与个人总结

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 深入理解软件工程 这个作业在哪个具体方面帮助我实现目标 ...

  10. kafka错误之 Topic xxx not present in metadata after 60000 ms

    Topic xxx not present in metadata after 60000 ms 一.背景 二.场景还原 1.jar包引入 2.jar代码 3.运行结果 三.问题解决 四.参考文档 一 ...