这里介绍一下Flask表单提交相关的方法,还是以代码实例为主。
首先,Flask模板中表单提交代码与我们一般写的H5表单无异,当然,Flask也提供了表单类,Flask-WTF扩展。这里只介绍常规的表单提交方法。

首先是模板类:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>from_test</title>
</head>
<body>
{% if name %}{{ name }}
{% else %}
<form method="post" action="login">Name:<input type="text" name="name"/>PassWord:<input type="password" name="password"/><input type="submit" value="Submit"/>
</form>
{% endif %}
</body>
</html>

处理程序:

from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():return render_template('test1.html')@app.route('/login', methods=['post'])
def login():name = request.form.get('name')password = request.form.get('password')if name == 'admin' and password == '123':return render_template('test1.html', name=name)return render_template('test1.html')if __name__ == '__main__':app.run(debug=True)
当验证成功后,页面显示登录者的名字信息。验证失败则继续显示登录页面。
但以上程序有一个问题,当提交信息后,地址栏显示信息如下:

如果此时点击刷新按钮,那么会出现以下提示:

这不太友好,要解决这个问题可以使用重定向,Flask提供了redirect函数,用法如下:

@app.route('/login', methods=['get', 'post'])
def login():name = request.form.get('name')password = request.form.get('password')if name == 'admin' and password == '123':return redirect(url_for('login'))return render_template('test1.html')
当我们登录成功后,此时用户刷新页面也没有任何问题,但是名字没有传递到页面。那么这时就要和会话session一块儿使用来保证重定向后信息不被丢失。
用法如下:
@app.route('/login', methods=['get', 'post'])
def login():name = request.form.get('name')password = request.form.get('password')if name == 'admin' and password == '123':session['name'] = namereturn redirect(url_for('login'))return render_template('test1.html', name=session.get('name'))
我这边用的是python2.7,在直接使用时出现一些错误提示:
the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret
提示比较明显,没有设置密钥导致了session不可用,为了安全起见,也应该设置一个密钥,Flask提供了密钥设置的方法:app.config['SECRET_KEY']
设置密钥可以有效防止跨站请求伪造的攻击。
解决办法是在代码中加入:
app.config['SECRET_KEY'] = 'myproject'
app.secret_key = 'myproject'
当然,通常不同的程序使用不同的密钥,并且密钥应该保存在环境变量中,而不是这样直接写。
在进行表单提交操作时,如果我们写错了用户名或者密码,页面往往会给出提示,Flask提供了很方便的操作,即使用Flash消息。
这里做一个简单的用户不存在提示(只是演示Flash用法,用户名密码分开提示是不安全的)
@app.route('/login', methods=['get', 'post'])
def login():name = request.form.get('name')password = request.form.get('password')if name == 'admin' and password == '123':session['name'] = namereturn redirect(url_for('login'))if name != 'admin':flash('no this name')return render_template('test1.html', name=session.get('name'))

页面模板中消息提示的代码:

{% for message in get_flashed_messages() %}{{ message  }}
{% endfor %}
现在应该是可以了,这里我本人使用的是python2.7,如果消息提示为中文,可能此时会遇到一个编码错误,信息:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
原因是读取消息时,python的str默认是ascii编码,和unicode编码冲突,解决方案是加入如下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')

大功告成!

Flask表单提交的方法相关推荐

  1. 表单提交Post方法、Get方法

    表单用来接受用户的输入,并将用户的输入以"name=value值对"集合的形式提交到服务器进行处理.那么表单是怎样将数据提交到服务器的?服务器是怎样对表单数据进行处理的?下面我将为 ...

  2. php ajax form表单提交,Ajax方法实现Form表单提交的方法

    这次给大家带来Ajax方法实现Form表单提交的方法,Ajax方法实现Form表单提交的注意事项有哪些,下面就是实战案例,一起来看一下. 写在前面的话 在使用form表单的时候,一旦点击提交触发sub ...

  3. python表单提交的两种方式_详解flask表单提交的两种方式

    一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html ... data Submit &nbsp 将操作绑定 $(document).ready(function() ...

  4. python flask 表单提交_python中flask应用(表单处理)

    本篇文章给大家带来的内容是关于python中flask应用(表单处理),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么使用Flask-WTF? request对象公开了所有 ...

  5. submit表单提交

    表单提交时我们需要对表单中的数据进行判断,所以可以用submit和button提交表单. 首先我们来看一下表单form的一些属性 1.id:表单的唯一标识 2.name:表单的名字 3.method: ...

  6. form 表单提交时用ajax异步请求导致ajax请求结果无法接收问题

    1.背景描述,有个公司内部用的小系统,不想大动干戈用太多前端框架,就用HTML5写了个登陆页面,刚开始想着用form表单提交登陆账户信息.后来因为前后端分离,并且统一用ajax调用后台服务交互数据,因 ...

  7. html form提交前验证,form表单提交前验证实现方法

    form表单提交前验证实现方法2017-11-26 20:54 form表单提交是网站中最常见的,基本上所有的网站都会用到. 除非你就一些静态网页,仅仅是展示,而不需要互动,所以不需要提交表单. 但是 ...

  8. php 表单处理,用PHP提交from表单的处理方法

    用PHP提交from表单的处理方法 PHP独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.下面是小编为大家搜索整理的PHP提交from表单的 ...

  9. jquery submit()不能提交表单的解决方法

    jquery submit()不能提交表单的解决方法 参考文章: (1)jquery submit()不能提交表单的解决方法 (2)https://www.cnblogs.com/war-hzl/p/ ...

最新文章

  1. 由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 ...的解决方法...
  2. eeglab教程系列(12)-使用ICA分解数据
  3. iOS 12 真机调试 Xcode 9 提示 Could not locate device support files.
  4. mac hdmi 不能调整音量_搭配这几个软件,你的 AirPods 在安卓、Mac 上会更好用
  5. redis主从架构宕机问题手动解决
  6. Centos 安装 jdk 和配置环境变量
  7. 语言余一个负数_C语言学习日记(8)——整数溢出
  8. 使用C语言读取properties文件V1.0
  9. C atoi函数
  10. mac系统升级后使用gitxcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), miss
  11. 创建一个dynamics 365 CRM online plugin (三) - PostOperation
  12. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)
  13. 《极客与团队》一第二章 培养出色的团队文化
  14. 用C语言实现:打印100-200之间的素数。
  15. JavaScript技巧写法
  16. java中根号2怎么表示_根号2的计算方法(Java实现)
  17. web项目406错误的解决
  18. centos 内网ip 设置_CentOS7 设置局域网固定IP
  19. 介绍兴趣爱好的网页html,介绍兴趣爱好的作文5篇
  20. Xilinx FPGA的DNA是什么?

热门文章

  1. 【强化学习】Q-Learning算法求解悬崖行走问题 + Python代码实战
  2. excel中时间加分钟运算公式
  3. 指数和个股的对数收益率正态性检验
  4. 数据结构严蔚敏代码合集 严书数据结构代码实现 可直接运行 持续更新by myself
  5. Win11怎么添加信任软件?Win11怎么把软件添加进白名单?
  6. 幼儿抽象逻辑思维举例_【干货】教师资格《幼儿保教知识与能力》重点归纳一...
  7. 今天安装了VS2008中文版SP1。
  8. 浏览器访问不了localhost
  9. Long与Integer之间的转换产生的问题
  10. MathType中的四则运算符号该怎样进行输入