文档章节

Flask 表单学习

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:19
字数 1385
阅读 1
收藏 0
点赞 0
评论 0

1. 表单介绍

什么是表单?

表单是 HTML 页面中负责 数据采集 功能的部件。它往往由三个部分组成,即表单标签、表单域、表单按钮。我们可以通过表单,将用户输入的数据提交给服务端,并交由服务端进行处理。

表单标签
  • 用于声明表单的范围,位于表单标签中的元素将被提交
  • 语法:<form>...</form>
  • 属性:Method, Enctype, action ......
表单域
  • 表单域包含了文本框,密码框等多种类型
  • 语法:<input ...... />
  • 属性:type, name, value ......
表单按钮
  • 文本框 <... type = "text">
  • 密码框 <... type = "password">
  • 文本区域 <... type = "textarea">
  • 文件上传框 <... type = "file">
  • 单选框 <... type = "radio">
  • 复选框 <... type = "checkbox">

2. 表单的提交方式

1. GET 方式

GET 方式通过 URL 提交数据,数据在 URL 中可以看到。GET 方式的适用场合为:

  • 单纯的数据请求,不进行其他操作
  • 表单数据较短,不超过 1024 个字符
  • 对安全性要求一般的场合

2. POST 方式

POST 方式,数据放置在 HTML header 中提交。POST 方式的适用场合为:

  • 数据不仅仅用于请求,还需要将数据插入数据库内
  • 表单数据过长时,比如是一篇博客内容
  • 要传送的数据不是 ASCII 编码

实战

我们首先创建以下文件目录:

192:test ming$ tree 
.
├── app.py
├── static
└── templates
    └── index.html

2 directories, 2 files

之后,我们首先来编写 index.html 中的表单代码,如下:

<!DOCTYPE html>
<html>
<head>
    <title> flask form </title>
</head>
<body>
    <div align="center">
    <h1> User Management </h1>
    <form method="post">
        <input type="text" name="username" placeholder="username" /> <br />
        <input type="password" name="password" placeholder="password" /> <br />
        <input type="submit" value="Submit" />
        <input type="reset" value="reset" />
    </form>
    </div>
</body>
</html>

然后,编写 app.py 中的代码,如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask 
from flask import request, render_template, redirect

app = Flask(__name__)

@app.route('/user', methods = ['GET', 'POST'])
def hello_world():
    if request.method == 'POST':
        # request.form 表示我们获取表单中的数据
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == 'admin':
            return redirect("http://www.jianshu.com/notebooks/6873024/latest")
        else:
            return render_template('index.html')
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

然后我们利用 python app.py 运行程序,得到如下界面:


之后,我们还可以向 index.html 中发送参数,具体可以看这个博客。接下来,我们修改 app.py 程序来向 index.html 文件发送参数,如下代码加入 message 参数:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask 
from flask import request, render_template, redirect

app = Flask(__name__)

@app.route('/user', methods = ['GET', 'POST'])
def hello_world():
    if request.method == 'POST':
        # request.form 表示我们获取表单中的数据
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == 'admin':
            return redirect("http://www.jianshu.com/notebooks/6873024/latest")
        else:
            message = "Login Failed"
            return render_template('index.html', message = message)
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

修改 index.html 文件如下:

<!DOCTYPE html>
<html>
<head>
    <title> flask form </title>
</head>
<body>
    <div align="center">
    <h1> User Management </h1>
    {% if message %}
        {{message}}
    {% endif %}
    <form method="post">
        <input type="text" name="username" placeholder="username" /> <br />
        <input type="password" name="password" placeholder="password" /> <br />
        <input type="submit" value="Submit" />
        <input type="reset" value="reset" />
    </form>
    </div>
</body>
</html>

运行以上代码之后,我们点击 Submit 按钮之后,就会显示 message 传递的 Login Failed 参数,运行界面如下:


以上方法基本就能实现表单和 flask 框架之间的信息传递,但是当需要传递的信息很多时,上面这种方法就会显得非常臃肿和麻烦。那么,我们就可以利用 flask 的扩展来简化我们的代码。首先我们需要在终端中安装这个扩展,可以利用以下命令来安装:

sudo pip install Flask-wtf

之后,我们可以利用这个扩展在表单中构建用户名和密码的输入框。首先我们需要引入表单类、文本框、密码框和验证器,如下:

# 引入表单类
from wtforms import Form
# 引入文本框
from wtforms import TextField
# 引入密码框
from wtforms import PasswordField
# 引入验证器,验证表单内容是否正确
from wtforms import validators

之后,修改 app.py 中的代码,如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask 
from flask import request, render_template, redirect

app = Flask(__name__)

# 引入表单类
from wtforms import Form
# 引入文本框
from wtforms import TextField
# 引入密码框
from wtforms import PasswordField
# 引入验证器,验证表单内容是否正确
from wtforms import validators

class LoginForm(Form):
    # 表名 username 是一个必须填入的对象,用验证器来进行验证
    username = TextField("username", [validators.Required()])
    password = PasswordField("password", [validators.Required()])

@app.route('/user', methods = ['GET', 'POST'])
def hello_world():

    myForm = LoginForm(request.form)
    return render_template('index.html', form = myForm, message = False)

if __name__ == '__main__':
    app.run()

之后,我们修改 index.html 中的代码,如下:

<!DOCTYPE html>
<html>
<head>
    <title> flask form </title>
</head>
<body>
    <div align="center">
    <h1> User Management </h1>
    {% if message %}
        {{message}}
    {% endif %}
    <form method="post">
        Username: {{form.username}} <br />
        Password: {{form.password}} <br />
        <input type="submit" value="Submit" />
        <input type="reset" value="reset" />
    </form>
    </div>
</body>
</html>

然后,我们运行一下代码,可以得到和上面一样的界面,运行界面如下:


之后,我们向 app.py 中加入验证表单的代码,具体如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask 
from flask import request, render_template, redirect

app = Flask(__name__)

# 引入表单类
from wtforms import Form
# 引入文本框
from wtforms import TextField
# 引入密码框
from wtforms import PasswordField
# 引入验证器,验证表单内容是否正确
from wtforms import validators

class LoginForm(Form):
    # 表名 username 是一个必须填入的对象,用验证器来进行验证
    username = TextField("username", [validators.Required()])
    password = PasswordField("password", [validators.Required()])

@app.route('/user', methods = ['GET', 'POST'])
def hello_world():

    myForm = LoginForm(request.form)
    if request.method == 'POST':
        # myForm.validators() 判断表单里面的值是否有效
        if myForm.username.data == 'admin' and myForm.password.data == 'admin' and myForm.validators():
            return redirect('http://www.jianshu.com/notebooks/6873024/latest')
        else:
            message = "Login Failed"
            return render_template('index.html', form = myForm, message = message)
    return render_template('index.html', form = myForm, message = False)

if __name__ == '__main__':
    app.run()

至此,你应该已经学会了,如何使得flask 和表单之间的链接吧。

本文转载自:http://www.jianshu.com/p/dac0dad56c34

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
python学习-flask-模版/表单

2.1初始化 所有 Flask 程序都必须创建一个程序实例。Web 服务器使用一种名为 Web 服务器网关接口 (Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转交给这个对象处...

时间之友
01/03
0
0
Flask-WTF 之防止CSRF***学习记录

CSRF 保护 这部分文档介绍了 CSRF 保护。 为什么需要 CSRF? Flask-WTF 表单保护你免受 CSRF 威胁,你不需要有任何担心。尽管如此,如果你有不包含表单的视图,那么它们仍需要保护。 例如,由...

MK先生
06/26
0
0
(三)Flask 学习 —— web 表单

web 表单 回顾 在上一章节中,我们定义了一个简单的模板,使用占位符来虚拟了暂未实现的部分,比如用户以及文章等。 在本章我们将要讲述应用程序的特性之一–表单,我们将会详细讨论如何使用...

水果糖
2016/02/25
1K
0
《Flask Web开发:基于Python的Web应用开发实战》.PDF

简介 本书不仅适合初级Web开发人员学习阅读,更是Python程序员用来学习高级Web开发技术的优秀参考书。 • 学习Flask应用的基本结构,编写示例应用; • 使用必备的组件,包括模板、数据库、W...

jackmk
2017/08/12
0
0
(十)Flask 学习 —— 全文搜索

全文搜索 回顾 在前面的章节(分页),我们已经加强了数据库查询,因此能够在页面上获取各种查询。 今天,我们会继续探讨数据库的话题,只是领域不同。所有存储内容的应用程序必须提供搜索能力...

水果糖
2016/02/25
331
0
好书推荐.flask.>

图书封面: 书籍简介: 1. 学习Flask应用的基本结构,编写示例应用; 使用必备的组件,包括模板,数据库,Web表单和电子邮件支持; 使用包和模块构建可伸缩的大型应用; 实现用户认证,角色和个人资...

满满李
2016/06/03
97
0
(五)Flask 学习 —— 用户登录

用户登录 回顾 在上一章中,我们已经创建了数据库以及学会了使用它来存储用户以及 blog,但是我们并没有把它融入我们的应用程序中。在两章以前,我们已经看到如何创建表单并且留下了一个完全...

水果糖
2016/02/25
232
0
Flask入门 表单Flask-wtf form原生与Bootstrap渲染(七)

(1) 原生的表单 模板页面,form表单 在manage.py中 在manage.py中将路由函数合并 (2) Flask-wtf表单 说明 : 是一个用于表单处理,校验并提供csrf验证的功能的扩展库 安装 : 作用: Flask-wtf能保...

善良小郎君
06/02
0
0
Python进阶(五十三)-Flask Web开发实现将表单渲染成HTML

Python进阶(五十三)-Flask Web来发实现将表单渲染成HTML   在利用Flask进行Python Web开发时,页面中的wtf.quick_form(form)函数中的参数form是如何与视图函数中的form变量关联起来的?即F...

sunhuaqiang1
2017/05/31
0
0
网站后端.Flask.实战-社交博客开发-flask-login认证用户?

用户模型 1.用户登录后认证状态需要被记录,这样浏览不同的页面才能记住这个状态,flask-login专门用来管理用户认证系统中的认证状态,且不依赖特定的认证机制 2.用户模型必须实现isauthenticat...

满满李
2016/06/26
499
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

轻松搭建svn版本管理工具+svnmanager管理客户端

前面的文章有写过svn版本管理工具的安装是基于svn的安装包进行安装,对于svn与apache的结合还得下svn和apache的模块进行结合过程比较繁琐,今天来介绍下通过centos的yum来安装svn能够快速安装...

javazyw
10分钟前
0
0
keepalived配置高可用集群

Linux集群概述 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:...

TaoXu
16分钟前
0
0
mysql联表批处理操作

1 概述 mysql中的单表增删改查操作,可以说是基本中的基本. 实际工作中,常常会遇到一些基本用法难以处理的数据操作,譬如遇到主从表甚至多级关联表的情况(如一些历史问题数据的批量处理),考虑到...

社哥
19分钟前
0
0
IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
33分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
36分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
36分钟前
1
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
37分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
40分钟前
0
0
Rancher 2.0集群与工作负载告警

Rancher 2.0操作指南。本文将step by step演示如何使用Rancher 2.0中集成的告警功能,包括设置通知程序、设置集群级别以及工作负载级别的告警。 在Rancher 1.x时期,告警功能是很多Rancher用...

RancherLabs
45分钟前
1
0
Python中字符串拼接的N中方法

python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!'print(s) 输出结果:Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中...

木头释然
46分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部