表单 Flask-WTF

项目结构

pip install flask-wtf

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

为了增强安全性,密钥不应该直接写入代码,而要保存在环境变量中。

首先,导入flask_wtf库,并从中引入FlaskFrom类,如下所示:

from flask_wtf import FlaskForm

表单的字段、验证函数,需要从wtforms库导入

from wtforms import StringField,SubmitField
from wtforms.validators import Required

表单类

表单类

LoginForms.py

from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import Required class LoginForm(FlaskForm):
name = StringField('请输入你的姓名:')
submit = SubmitField('提交')

index.py

from flask import Flask,render_template
from flask_bootstrap import Bootstrap
from flask import request,url_for
from flask_moment import Moment
from datetime import datetime
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired
from app.Views.LoginForm import LoginForm
from flask import redirect,session
from flask import flash
#初始化
app = Flask(__name__)
bootstrap = Bootstrap(app)
app.config['SECRET_KEY'] = 'hard to guess string'
# 初始化实例
moment = Moment(app) #路由,处理URL 和函数之间关系的程序称为路由
@app.route('/',methods=['GET','POST'])
#视图函数,函数执行,返回结果
def index():
name = None
form = LoginForm()
if form.validate_on_submit():
name = form.name.data
form.name.data = ''return render_template('index.html',form=form,name=name))
#启动服务器
if __name__ == '__main__':
app.run()

把表单渲染成HTML

base.html

{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Flasky{% endblock %}
{#包含导航条的程序基模板#}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">TEST</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container">
{% block page_content %}{% endblock %}
</div>
{% endblock %}

index.html

{% extends "base.html" %}
{% block title %}IndexTitle{% endblock %}
<div class="container">
{% block page_content %}
<h1>Hello Flask!</h1>
{# <p>本地时间格式化:{{ moment(current_time).format('YYYY-MM-DD HH:mm:ss') }}.</p>#}
{# <p>本地时间格式化:{{ moment(current_time).format('YYYY-MM-DD') }}.</p>#}
{# <p>本地时间格式化:{{ moment(current_time).format('YYYY') }}.</p>#}
{{ wtf.quick_form(form) }}
你刚输入的姓名是:
{{ name }}
{% endblock %}
</div>

从零开始学Flask框架-005的更多相关文章

  1. 从零开始学Flask框架-004

    Flask-Moment pip install flask-moment 除了moment.js,Flask-Moment 还依赖jquery.js.但是Bootstrap 已经引入了jquery. ...

  2. 从零开始学Flask框架-007

    Flash消息 from flask import flash 渲染Flash消息,在基模板base.html中引入get_flashed_messages() {% extends "bo ...

  3. 从零开始学Flask框架-006

    重定向和用户会话 因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求.如果这个请求是一个包含表单数据的POST 请求,刷新页面后会再次提交表单. 基于这个原因,最好别让Web 程序把POST ...

  4. 从零开始学Flask框架-003

    index.py from flask import Flask,render_template from flask_bootstrap import Bootstrap #初始化 app = Fl ...

  5. 从零开始学Flask框架-002

    Jinja2模板 默认情况下,Flask 在程序文件夹中的templates 子文件夹中寻找模板. Jinja2 中的extends 指令从Flask-Bootstrap 中导入bootstrap/b ...

  6. 从零开始学Flask框架-001

    新建项目 目录结构 Index.html <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  7. 从零开始学Flask框架-008

    数据库 安装Flask-SQLAlchemy扩展库 pip install flask-sqlalchemy 引入SQLAlchemy类 from flask_sqlalchemy import SQ ...

  8. 从零开始学 Java - 搭建 Spring MVC 框架

    没有什么比一个时代的没落更令人伤感的了 整个社会和人都在追求创新.进步.成长,没有人愿意停步不前,一个个老事物慢慢从我们生活中消失掉真的令人那么伤感么?或者说被取代?我想有些是的,但有些东西其实并不是 ...

  9. 4. 使用别的json解析框架【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/51585921 此文章已经废弃,请看新版的博客的完美解决方案: 78. Spring Boo ...

随机推荐

  1. Ubuntu+QEMU+Xv6环境搭建

    操作系统:Ubuntu 16.04 32位 虚拟机:VMware 模拟器:QEMU 之前有一台centos 64位虚拟机,使用源码安装配置环境,出了一些列问题,最终环境都已经配好了,也能够在qemu上 ...

  2. Nexus3.X忘记admin密码找回

    一.问题背景 nexus3 这种东西,传完一次,很少动了,很容易忘记密码,不要急有方法找回. 官方网站关于解决该问题的方法: https://support.sonatype.com/hc/en-us ...

  3. 004 JpaRepository,CrudRepository,PagingAndSortingRepository的区别

    很多程序都在使用,CrudRepository或者PagingAndSortingRepository,但是以前自己的程序使用的是JpaRepository,然后查了一下材料,记录一下. 1.类图 2 ...

  4. 产品经理 写SQL

    产品经理必备技能:写SQL - 云+社区 - 腾讯云https://cloud.tencent.com/developer/news/3177 产品经理学SQL(一)一个小时上手SQL | 人人都是产 ...

  5. leetcode 290. Word Pattern 、lintcode 829. Word Pattern II

    290. Word Pattern istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流,这样就实现了字符串的空格切割. C++引入了ost ...

  6. python-learning-第二季-数据库编程

    https://www.bjsxt.com/down/8468.html 代码实现: #coding:utf- #导入模块 import sqlite3 #创建connect连接 con = sqli ...

  7. 【Java】Spring之控制反转(IoC)(二)

    控制反转(IoC) IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来 ...

  8. 了解美杜莎(Medusa)

    (1).美杜莎介绍 Medusa(美杜莎)是一个速度快,支持大规模并行,模块化的暴力破解工具.可以同时对多个主机,用户或密码执行强力测试.Medusa和hydra一样,同样属于在线密码破解工具.Med ...

  9. 使用postman调用webservice接口

    通过wsdl查看接口地址: 填入xml报文: 配置相应的headers:

  10. Spring Boot 使用YAML配置

    YAML是JSON的一个超集,可以非常方便地将外部配置以层次结构形式存储起来.当项目的类路径中有SnakeYAML库(spring-boot-starter中已经被包含)时,SpringApplica ...