秦悦明的运维笔记

flask-bootstrap和表单

1.bootstrap安装

1
pip install flask-bootstrap

2.初始化bootstrap

1
2
3
from flask_bootstrap import Bootstrap
...
bootstrap = Bootstrap(app)

3.制作自己的基模板

初始化bootstarp以后就可以继承bootstrap文件的基模板了

1
2
3
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
...

4.Form表单

主要用Flask-WTF包

1
pip install flask-wtf

Flask-WTF是wtforms的一个扩展,两个包都要引入。

5.设置SCRF保护

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

6.Form类

跟django的套路差不多,都要继承一个Form父类,

1
2
3
4
5
6
from flask_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')

7.模板

可以直接写html

1
2
3
4
5
<form method="POST">
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>

或者直接用Flask-bootstrap的辅助函数一次生产这个form

1
2
{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

8.处理表单

1
2
3
4
5
6
7
8
@app.route('/', methods=['GET', 'POST'])
def index():
name = None
form = NameForm()
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
return render_template('index.html', form=form, name=name)

methods里面加入POST请求。如果没有指定,只能路由GET请求。
如果提交的数据通过验证,则validate_on_submit返回True,把name字段清空,并且把数据传到模板里面去。