1、request.form获取POST请求中提交的表单数据
hello.py:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('home.html')
@app.route('/signin', methods=['GET'])
def signin_form():
return render_template('form.html')
@app.route('/signin', methods=['POST'])
def signin():
#receive the data from submit
username = request.form['username']
password = request.form['password']
if username=='admin' and password=='password':
return render_template('signin-ok.html', username=username)
return render_template('form.html', message='Bad username or password', username=username)
if __name__ == '__main__':
app.run()form.html:
<html>
<head>
<title>Please Sign In</title>
</head>
<body>
{% if message %}
<p style="color:red">{{ message }}</p>
{% endif %}
<form action="/signin" method="post">
<legend>Please sign in:</legend>
<p><input name="username" placeholder="Username" value="{{ username }}"></p>
<p><input name="password" placeholder="Password" type="password" value="{{ password }}"></p>
<p><button type="submit">Sign In</button></p>
</form>
</body>
</html>
hello.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from flask import Flask, render_template
from flask.ext.script import Manager
from flask.ext.bootstrap import Bootstrap
from flask.ext.moment import Moment
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
manager = Manager(app)
bootstrap = Bootstrap(app)
moment = Moment(app)
#表单类,定义了一个文本字段和一个提交按钮
#Required()为验证函数
class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')
#视图函数处理表单
@app.route('/', methods=['GET', 'POST'])
def index():
name = None
form = NameForm()
#如果提交的数据验证通过,则返回True
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
return render_template('index.html', form=form, name=name)
if __name__ == '__main__':
manager.run()
{% 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.html渲染整个Flsk-WTF表单,参数form是hello.py中传过来的form实例-->
{{ wtf.quick_form(form) }}
{% endblock %}
3、重定向和用户会话
Submit后,刷新网页会出现警告提示:
修改hello.py:(增加会话和重定向功能)
from flask import Flask, render_template, session, redirect, url_for
from flask.ext.script import Manager
from flask.ext.bootstrap import Bootstrap
from flask.ext.moment import Moment
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
manager = Manager(app)
bootstrap = Bootstrap(app)
moment = Moment(app)
class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
if __name__ == '__main__':
manager.run()
本文介绍使用Flask框架处理Web表单的方法,包括通过request.form获取表单数据、利用Flask-WTF扩展简化表单处理流程及实现重定向与用户会话功能。
&spm=1001.2101.3001.5002&articleId=50569620&d=1&t=3&u=17fcffd445e44e629b38a26b688b42e4)
247

被折叠的 条评论
为什么被折叠?



