Flask框架学习笔记之消息提示与异常处理操作详解
本文详解Flask框架中的消息提示与异常处理机制。通过flash和get_flashed_messages实现登录界面的用户反馈,利用errorhandler修饰器自定义404错误页面,并结合abort方法触发指定错误状态,帮助开发者完善Web应用的交互体验与错误处理逻辑。
本文详细介绍Flask框架中消息提示与异常处理的具体操作方法,旨在为读者提供实用的参考案例。
Flask消息提示机制
在Flask中,可以通过flash方法向用户显示临时提示消息。
from flask import Flask, flash, render_template, request, abort
app = Flask(__name__)
app.secret_key = '520'
@app.route('/')
def index():
flash("Hello loli")
return render_template("flash.html")
模板层面,Flask提供了get_flashed_messages函数供前端调用,用于获取视图函数中通过flash传递的字符串内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello Login</h1>
<h2>{{ get_flashed_messages()[0] }}</h2>
</body>
</html>
接下来,我们将构建一个简单的表单来模拟登录界面,并通过request对象获取用户输入的表单数据。
@app.route('/login', methods=['POST'])
def login():
# 获取表单
form = request.form
# 获取表单数据
username = form.get('username')
password = form.get('password')
# 若不存在username则flash(xxx)
if not username:
flash('Please input username')
return render_template("flash.html")
if not password:
flash('Please input password')
return render_template("flash.html")
if username == "loli" and password == "520":
flash("Login success")
return render_template("flash.html")
else:
flash("username or password wrong")
return render_template('flash.html')
对应的表单HTML模板代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello Login</h1>
<form action="/login" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Submit">
</form>
<h2>{{ get_flashed_messages()[0] }}</h2>
</body>
</html>

当用户未输入任何数据时,系统会提示用户输入username。

如果用户未输入密码,则会显示相应的flash提示信息。

当输入的用户名和密码不匹配时,系统会给出错误提示。

若验证通过,则显示登录成功的界面。
自定义404错误处理
除了消息提示,Flask还支持自定义404等错误页面,框架提供了errorhandler修饰器来实现这一功能。
@app.errorhandler(404)
def not_found(e):
return render_template("404.html")
以下是一个简单的404错误页面模板示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>404 页面不存在</h1>
<h2>Sorry</h2>
</body>
</html>

在正常业务逻辑中,若需要触发404错误,可以导入abort方法。例如,当user_id不等于520时,系统将自动跳转至404页面。
@app.route('/users/<user_id>')
def users(user_id):
if int(user_id) == 520:
return render_template("user.html")
else:
abort(404)
用户详情页面的模板代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Loli </h1>
</body>
</html>
完整的示例源码如下所示:
#-*- coding:utf-8 -*-
from flask import Flask, flash, render_template, request, abort
app = Flask(__name__)
app.secret_key = '520'
@app.route('/')
def index():
flash("Hello loli")
return render_template("flash.html")
@app.route('/login', methods=['POST'])
def login():
# 获取表单
form = request.form
# 获取表单数据
username = form.get('username')
password = form.get('password')
# 若不存在username则flash(xxx)
if not username:
flash('Please input username')
return render_template("flash.html")
if not password:
flash('Please input password')
return render_template("flash.html")
if username == "loli" and password == "520":
flash("Login success")
return render_template("flash.html")
else:
flash("username or password wrong")
return render_template('flash.html')
@app.errorhandler(404)
def not_found(e):
return render_template("404.html")
@app.route('/users/<user_id>')
def users(user_id):
if int(user_id) == 520:
return render_template("user.html")
else:
abort(404)
if __name__ == '__main__':
app.run()
希望本文的内容能对基于Flask框架的Python程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









