首页 > 编程 > Python > 正文

Python Flask-web表单使用详解

2020-02-16 10:46:21
字体:
来源:转载
供稿:网友

Flask-WTF扩展可以把处理web表单的过程变成一种愉悦的体验。

一、跨站请求伪造保护

默认情况下,Flask-WTF能够保护所有表单免受跨站请求伪造的攻击。恶意网站把请求发送到被攻击者已登录的网站时就会引起CSRF攻击。

为了实现CSRF保护,Flask-WTF需要程序设置一个密钥。Flask-WTF使用这个密钥生成加密令牌,再用令牌验证请求中表单数据的真伪。设置密钥的方法如下所示:

app = Flask(__name__)app.config['SECRET_KEY']='hard to guess string'

二、表单类

使用Flask-WTF时,每个web表单都由一个继承自Form的类表示。这个定义表单中的一组字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数。验证函数用来验证用户提交的输入值是否符合要求。

#!/usr/bin/env python#简单的web表单,包含一个文本字段和一个提交按钮 from flask_wtf import Formfrom wtforms import StringField,SubmitFieldfrom wtforms.validators import Required class NameForm(Form):  name = StringField('What is your name?',validators=[Required()])  submit = SubmitField('Submit')

StringField类表示属性为type="text"的<input>元素,SubmitField类表示属性为type="submit"的<input>元素。

WTForms支持的HTML标准字段

WTForms验证函数

四、把表单渲染成HTML

表单字段是可用的,在模板中调用后会渲染成HTML。假设视图函数把一个NameForm实例通过参数form传入模板,在模板中可以生成一个简单的表单,如下所示:

<form method="POST">  {{ form.hidden_tag() }}  {{ form.name.label }} {{ form.name() }}  {{ form.submit() }}</form>
<form method="POST">  {{ form.hidden_tag() }}  {{ form.name.label }} {{ form.name(id='my-text-field') }}  {{ form.submit() }}</form>

Flask-Bootstrap提供了一个非常高端的辅助函数,可以使用Bootstrap中预先定义好的表单样式渲染整个Flask-WTF表单,而这些操作只需调用一次即可完成。

{% import "boostrap/wtf.html" as wtf %}{{ wtf.quick_form(form) }}
#使用Flask-WTF和Flask-Bootstrap渲染表单 {% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %} {% block title %}Flasky{% endblock %} {% block page_content %}<div class="page-header">  <h1>Hello,{% if name %}{{ name }}{% else %}Stranger{% endif %}</h1></div>{{ wtf.quick_form(form) }}{% endblock %}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表