对于我的应用程序,我在 flask_session 的帮助下在数据库中管理服务器上的会话数据。
我想修改行为,以便仅当远程地址不在 IP 黑名单上时才创建会话。
我已经修改了 SessionInterface 的 open_session 以包括以下内容:
self.firewall = Firewall # flask_sqlalchemy model
def open_session(self, app, request):
firewall = self.firewall.query.filter_by(ip_address=request.remote_addr).first()
if firewall and firewall.black_list:
abort(400)
...
为了标记更好的错误,我创建了错误处理程序:
@main.app_errorhandler(400)
def bad_request(e):
return render_template("400.html"),400
数据库防火墙查找有效,并且按预期调用了 abort(400)。
问题是来自 open_session 的中止调用不会触发模板的使用。当从链接到应用程序的任何蓝图视图调用中止时,它确实使用模板。
如何强制使用我从 open_session 准备的中止模板?