简单的蓝图使用案例:
要实现一个http://127.0.0.1:5000/auth/register
flaskr/auth.py:
from flask import Blueprint
bp = Blueprint('auth', url_prefix='/auth')
@bp.route('/register', methods=('GET', 'POST'))
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
if not username:
error = 'Username is required.'
elif not password:
error = 'Password is required.'
elif db.execute(
'SELECT id FROM user WHERE username = ?', (username,)
).fetchone() is not None:
error = f"User {username} is already registered."
# 以下是数据库的操作
if error is None:
db.execute(
'INSERT INTO user (username, password) VALUES (?, ?)',
(username, generate_password_hash(password))
)
db.commit()
return '注册成功'
flaskr/init.py:
def create_app():
app = Flask(__name__)
# existing code omitted
from . import auth
app.register_blueprint(auth.bp)
return app
如果想在请求响应之前做出某些事情可以加@bp.before_app__request,例如:
flaskr/auth.py:
@bp.before_app_request
def load_logged_in_user():
user_id = session.get('user_id')
if user_id is None:
g.user = None
else:
g.user = get_db().execute(
'SELECT * FROM user WHERE id = ?', (user_id,)
).fetchone()
1. 更加理解了路由在Flask中的使用方法
2. 理解了路由的定义和工程结构化使用
3. 学习了如何使用请求前的处理函数