表单 Flask-WTF - 使用
1 配置
可以使用Flask-WTF来处理web表单,在使用之前要先配置下,打开config.py,编辑添加如下内容
WTF_CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess'
WTF_CSRF_ENABLED设置为True主要是开启CSRF保护,SECRET_KEY是为了实现CSRF保护,Flask-WTF需要应用程序去配置一个加密密钥。Flask-WTF使用这个密钥去生成加密令牌用于验证请求表单数据的真实性,注:为了提高安全性,密钥应该存储在一个环境变量中,而不是嵌入到代码中。配置完成后要通知Flask去加载这个配置文件,编辑app/__init__.py,添加如下内容
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
from app import views
2 表单类
使用Flask-WTF时,每个web表单是由继承自 Form 类的子类来展现的。该类在表单中定义了一组表单域,每个都表示为一个对象。每个表单域都可以连接到一个或多个 validators ; validators 是一个用于检查用户提交的输入是否合法的函数,app/forms.py 专门用来存放表单类,用例
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')
示例中, NameForm
表单有一个 name
文本框和 submit
提交按钮。 StringField
类表示一个 type="text"
属性的 <input>
标签。 SubmitField
类表示一个 type="submit"
属性的 <input>
标签。表单域构造函数的第一个参数是一个 label
,在渲染表单到HTML时会使用。StringField
构造函数包含可选参数 validators
,它定义了一组检查来验证用户提交的数据。 Required()
验证确保提交的表单域不为空
WTForms标准HTML表单域
WTForms验证
3 表单渲染模版
假设视图函数传递一个参数名为 form
的NameForm
实例给模板,模板就会生成一个简单的HTML表单,如下所示:假设名字为nameform.html
<form method="POST">
{ { form.name.label }} { { form.name() }}
{ { form.submit() }}
</form>
当然,结果是什么都没有。为了改变表单的外观显示,任何发送给该表单域的参数会被转换为HTML表单域属性;例如,你可以给定表单域 id
或 class
属性,然后定义CSS样式:即使有HTML属性,努力用这种方式渲染表单是非常重要的,所以最好是尽可能的使用Bootstrap自带的一系列表单样式。Flask-Bootstrap使用Bootstrap的预定义表单样式来提供高级的帮助函数来渲染整个Flask-WTF表单,这些操作都只需要一个调用即可完成
<form method="POST">
{ { form.name.label }} { { form.name(id='my-text-field') }}
{ { form.submit() }}
</form>
---完善 nameform.html
<!-- extend from base layout -->
{% extends "base.html" %}
{% block content %}
<h1>{{title}}</h1>
<form action="" method="post" name="nameform">
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>
{% endblock %}
4 视图函数使用表单
from .forms import NameForm
@app.route('/nameform', methods=['GET', 'POST'])
def nameform():
form = NameForm()
"""
处理接收表格数据,Flask-WTF让这个工作变得简单,validate_on_submit
处理了所有表格的基本工作,只需要判断然后直接引用数据即可
调用validate_on_submit时,这个函数会尝试接收用户提交的所有数据,然后做下表格校验,
如果一切校验都通过,意味着数据可以被合法安全处理,如果校验不通过会直接刷新停在原来页面
那如何做错误信息提示呢?
"""
if form.validate_on_submit():
flash('%s' %(form.name.data))
return redirect('/index')
return render_template('nameform.html',
title='nameform',
form=form)
效果
5 出错提醒
name再加个校验器,需要输入最少6个字符,最多35个字符
class NameForm(Form):
name = StringField('What is your name?', validators=[Required(), validators.Length(min=6, max=35)])
submit = SubmitField('Submit')
点击无反应,我们希望是能提示用户错误信息,在哪里加,在渲染的html模版里面,错误信息会存放到form.FieldName.errors里面,改进渲染模版
<!-- extend from base layout -->
{% extends "base.html" %}
{% block content %}
<h1>{{title}}</h1>
<form action="" method="post" name="nameform">
{{ form.hidden_tag() }}
<p>
{{ form.name.label }} {{ form.name() }}
{% for error in form.name.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.submit() }}
</p>
</form>
{% endblock %}
表单 Flask-WTF - 使用的更多相关文章
- Flask Web Development —— Web表单(上)
Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...
- Flask教程 —— Web表单(上)
第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依 ...
- Flask - WTF和WTForms创建表单
目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...
- 【Flask】 python学习第一章 - 6.0 WTF表单 数据库 蓝图
WTF表单 wtf.py pip install flask-wtf # 安装 from flask_wtf import FlaskForm from wtform import StringF ...
- flask 后台表单验证模块
我不想直接用flask的wtf模块,太大,功能太多,用不了.但后台也不能不做验证吧,我比较懒,不想一行一行写代码验证,所以就写了一个验证模块,对于小项目也够用了 # encoding=utf-8 # ...
- [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题
---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...
- 【Flask】 结合wtforms的文件上传表单
表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...
- 【Flask】 WTForm表单编程
WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Fo ...
- Flask学习 三 web表单
web表单 pip install flask-wtf 实现csrf保护 app.config['SECRET_KEY']='hard to guess string' # 可以用来存储框架,扩展,程 ...
- Flask入门之flask-wtf表单处理
参考文章 1. 使用 WTForms 进行表单验证 第11集 #Sample.py # coding:utf-8 from flask import Flask,render_template,re ...
随机推荐
- Centos 在VM中设置静态ip
cd /etc/sysconfig/network-scripts 然后代开第一个文件 一般是ifcfg-ens331)开始配置原来是这样的 修改/etc/sysconfig/network # Cr ...
- JavaScript--Function对象(函数)的声明和作用域
Funtion 封装了可重复使用的代码块对象,函数名是一个引用函数对象的变量 声明提前:在程序开始执行之前,将var 变量和function函数提前声明 但赋值并不会提前 它的三种创建方法: 创建1 ...
- stm32 待机模式
低功耗模式 降低系统时钟速度 不使用APBx和AHB外设时,将对应的外设时钟关闭 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC.系统时钟(SysTick ...
- kbmMW 5.10.10 SmartBinding问题修正
千呼万唤始出来,最新的kbmMW 5.10.01终于发布了,详情可以看xalion发的更新日志. 我期待的Smartbinding for Listview终于来了,在这一版本中,对SmartBind ...
- 学习CSRF漏洞并挖掘CSRF漏洞
什么是跨站请求伪造? 跨站请求伪造(英语:Cross-siterequest forgery),也被称为one-clickattack或者session riding,通常缩写为CSRF或者XSRF, ...
- Django drf:分页器详解
一.简单分页(查看第n页,每页显示N条) 二.偏移分页(在第n个位置,向后查看n条数据) 三.CursorPagination(加密分页,只能看上一页和下一页,速度快) 一.简单分页(查看第n页,每页 ...
- 快速认识Python
1.数字和表达式 什么是表达式,1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数.1+2*3 经过计算后得到的结果是7,就1+2*3 = 7.我们可以将计算结果保存在一个变 ...
- Vue 将一个组件嵌入到另一个组件中
https://github.com/JasmineQian/Vue_Sample App.vue是所有组件的 要嵌入到App.vue组件中, 在script处导入 import xxx from ...
- idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理
上一篇我们了解了如何控制入口流量,本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio ...
- python:pycharm中使用pandas读取中文路径报错问题的解决方案
假如你的文件路径名是这样的,例如:test.csv 只要它是小文件(大文件采用分块读取,后续会补上文件分块读取的相关博客),你的内存扛得住,那就直接 import pandas as pd test ...