[python][Flask] 使用WTF处理表单
来源:互联网 发布:新娘梦工厂提取数据 编辑:程序博客网 时间:2024/06/06 00:59
Flask-WTF(http://pythonhosted.org/Flask-WTF/)扩展可以把处理Web 表单的过程变成一种愉悦的体验。
以下演示一个简单的Web表单,包含一个文本字段和一个提交按钮:
# -*- coding: UTF-8 -*-from flask import Flask,render_template, session, redirect, url_for,flashfrom flask_bootstrap import Bootstrapfrom flask_moment import Momentfrom datetime import datetimefrom flask_wtf import Formfrom wtforms import StringField, SubmitFieldfrom wtforms.validators import Required#创建moment和bootstrap实例app=Flask(__name__)moment=Moment(app)bootstrap=Bootstrap(app)#实现CSFR保护app.config['SECRET_KEY'] = 'hard to guess string'#创建表单类class NameForm(Form): #文本字段 name = StringField('What is your name?', validators=[Required()]) #提交按钮 submit = SubmitField('Submit')@app.route('/', methods=['GET', 'POST'])def hello_falsk(): #创建一个实例 form = NameForm() if form.validate_on_submit(): #获取上下文中name的值 old_name = session.get('name') if old_name is not None and old_name != form.name.data: #flash消息 flash('Looks like you have changed your name!') #从表单中获取name值 session['name'] = form.name.data #重定向保证post不是最后一个方法 return redirect(url_for('hello_falsk')) return render_template('mainpage_WTF.html',form=form, name=session.get('name'),current_time=datetime.utcnow())#-----------------------------------------------------------------------------------------------------------------------if __name__=='__main__': app.run(debug=True)
mainpage_WTF.html内容如下:
{% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block title %}{{ super() }}{% endblock %}{% block navbar %}{{ super() }}{% endblock %}{% block content %}{{ super() }}{% endblock %}{% block scripts %}{{ super() }}<div class="container"> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} <div class="page-header"> <h3> <p>The local date and time is {{ moment(current_time).format('LLL') }}.</p> <p>That was {{ moment(current_time).fromNow(refresh=True) }}</p> </h3> <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1> </div> {{ wtf.quick_form(form) }}</div>{% endblock %}
详细解读py文件:
1.跨站请求伪造保护( CSRF )
为了实现CSRF保护,Flask-WTF程序需要设置一个密钥,方法如下:
app.config['SECRET_KEY'] = 'hard to guess string'
2.表单类
表单类有一个字段构造函数和一个提交按钮函数,其中字段构造函数StringField的第二个参数是validators可选参数,指定一个由验证函数组成的列表,在接受用户提交的数据之前验证数据。
以下是WTFForms支持的字段函数:
以下是WTFForms支持的验证函数:
3.视图函数
在视图函数中,我们首先创建了一个NameForm类实例。在提交表单之后,如果数据能被所有验证函数接受,那么validate_on_submit() 方法的返回值为True,否则返回False。
用户第一次访问程序时,服务器将收到一个没有表单数据的GET请求,因此validate_on_submit() 将返回False。
用户提交表单后,服务器会验证文本字段,如果满足Required()函数(文本字段不为空),则validate_on_submit() 将返回True。
此时可以通过session获取上下文的数据,将上下文中的name赋值给old_name,(如果是第一次提交,则上下文中的name为None)。
如果上下文中的name和用户此次提交的name不想等,则提示一个Flash消息。
return redirect(url_for('hello_falsk'))
redirect() 是个辅助函数,用来生成HTTP 重定向响应,保证post不是浏览器发送的最后一个请求。redirect() 函数的参数是重定向的URL,url_for() 函数的第一个且唯一必须指定的参数是端点名,即路由的内部名字。默认情况下,路由的端点是相应视图函数的名字。
4.将表单渲染成HTML
使用Flask-Bootstrap渲染表单,方式如下:
{% import "bootstrap/wtf.html" as wtf %}{{ wtf.quick_form(form) }}
阅读全文
0 0
- [python][Flask] 使用WTF处理表单
- 细说flask表单flask-wtf
- Flask的WTF使用
- Web表单(Flask-WTF)
- flask wtf 表单校验总结
- flask sqlalchemy wtf 使用笔记
- FLASK-WTF,为表单添加样式。
- flask-wtf
- Python Flask Web 第十课 —— flask-wtf
- Flask-WTF 示例
- Flask的表单处理
- flask-wtf表单中PasswordField无法回传显示密码问题解决方法
- Flask学习记录之Flask-WTF
- Python Flask-表单提交方式
- Flask之Web表单使用
- Flask笔记(3)--扩展包Flask-WTF,Flask-Moment
- Python Flask script 使用
- 【Python】Flask-RESTful使用
- 利用PO DAO 修改对应数据库数据
- Nginx 和 Apache 各有什么优缺点?
- jdbc操作Mysql相关事项
- HQL之多表查询(一对多和多对多)
- 简单表格、 表单、登录页面bootstrap
- [python][Flask] 使用WTF处理表单
- unity与iOS原生交互的代码(三)
- 用遍历打印6种三角形
- JMeter学习-001-认识Apache JMeter
- 欢迎使用CSDN-markdown编辑器
- modelMap 和modelAndView
- 冒泡、插入、选择排序及其改进
- kali linux 2.0下搭建DVWA渗透测试演练平台
- 浅谈工程师的调试法宝(五) -JScope的应用_MCU