下面我就为您详细讲解“Python框架Flask表单实现详解”的完整攻略,包含两条示例说明。
1. 安装Flask框架
在开始使用Flask框架之前,需要先安装Flask框架。使用以下命令可以完成安装:
pip install flask
2. 创建Flask应用并定义表单
在导入Flask框架后,我们需要创建一个Flask应用,并定义表单。首先要导入需要用到的模块和类:
from flask import Flask, request, render_template
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
然后我们需要定义一个表单类:
class MyForm(FlaskForm):
name = StringField('name', validators=[DataRequired()])
age = StringField('age', validators=[DataRequired()])
该表单类包含了两个字段,分别是姓名和年龄。其中name和age分别为字段的标签(Label),validators属性是用来指定验证器的,这里我们用了DataRequired()验证器,表示字段不能为空。
3. 定义路由和视图函数
接下来,我们需要定义路由和视图函数,用于处理表单数据的提交和展示。在该示例中,我们定义了两个路由:/和/result。/路由将用于渲染表单,/result路由将用于展示表单数据提交的结果。
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def hello_world():
form = MyForm()
if request.method == 'POST':
if form.validate_on_submit():
name = form.name.data
age = form.age.data
return redirect(url_for('result', name=name, age=age))
return render_template('index.html', form=form)
@app.route('/result/<name>/<age>')
def result(name, age):
return '姓名:' + name + '<br>年龄:' + age
在/hello_world路由中,我们首先实例化了MyForm表单对象,并将其传给渲染模板。如果表单数据提交成功,我们获取并展示了表单数据。在/result路由中,我们将表单数据作为参数传入,并将其展示出来。
4. 创建模板并渲染表单
最后,我们需要创建一个模板,并在模板中渲染表单。示例表单模板如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>表单示例</title>
</head>
<body>
<h1>表单示例</h1>
<form method="POST" action="/">
{{ form.csrf_token }}
<p>
{{ form.name.label }}<br>
{{ form.name(size=20) }}<br>
{% for error in form.name.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.age.label }}<br>
{{ form.age(size=20) }}<br>
{% for error in form.age.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
在模板中,我们使用Flask-WTF扩展提供的表单渲染模板,将表单字段渲染成HTML输入框,并使用{% for %}循环输出表单字段的错误消息。在渲染表单时,我们使用了form.csrf_token字段,它用于在表单中防止跨站点请求伪造(CSRF)攻击。
5. 示例说明
下面我们将分别介绍两个示例,分别是注册用户和留言板。
5.1 注册用户示例
在该示例中,我们创建了一个包含用户名、密码和邮箱的注册表单,并将表单数据传给/register路由进行处理。注册成功后,我们将表单数据保存到数据库,并返回注册成功的提示信息。
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = 'test'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(255), nullable=False)
email = db.Column(db.String(255), unique=True, nullable=False)
class RegisterForm(FlaskForm):
username = StringField('用户名', validators=[DataRequired()])
password = StringField('密码', validators=[DataRequired()])
email = StringField('邮箱', validators=[DataRequired()])
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if request.method == 'POST':
if form.validate_on_submit():
user = User(username=form.username.data,
password=form.password.data,
email=form.email.data)
db.session.add(user)
db.session.commit()
flash('注册成功,请登录!')
return redirect(url_for('login'))
return render_template('register.html', form=form)
在/route路由中,我们实例化了RegisterForm表单对象,并将其传给渲染模板。如果表单数据提交成功,我们将表单数据插入到数据库,并跳转到登录页面。
5.2 留言板示例
在该示例中,我们创建了一个包含昵称和留言的留言板,并将留言板数据传给/message路由进行处理。留言成功后,我们将留言板数据保存到数据库,并返回留言成功的提示信息。
class Message(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
message = db.Column(db.String(255), nullable=False)
class MessageForm(FlaskForm):
name = StringField('昵称', validators=[DataRequired()])
message = StringField('留言', validators=[DataRequired()])
@app.route('/message', methods=['GET', 'POST'])
def message():
form = MessageForm()
messages = Message.query.all()
if request.method == 'POST':
if form.validate_on_submit():
message = Message(name=form.name.data,
message=form.message.data)
db.session.add(message)
db.session.commit()
flash('留言成功!')
return redirect(url_for('message'))
return render_template('message.html', form=form, messages=messages)
在/message路由中,我们实例化了MessageForm表单对象,并将其传给渲染模板。如果留言数据提交成功,我们将留言数据插入到数据库,并刷新页面。
以上就是“Python框架Flask表单实现详解”的完整攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python框架flask表单实现详解 - Python技术站