gpt4 book ai didi

python - 将一些任意值绑定(bind)到 Flask 中的路由

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:02 25 4
gpt4 key购买 nike

如何优雅地绑定(bind)一些任意值和 flask 路由?假设,我想在我的 session 接口(interface)实现中或在 before_request Hook 中访问这个值。

现在我是这样做的:

@app.route('/foo/<bar>', defaults={'_my_val': True}):
def foo(bar, _my_val): # this is ugly hack
pass

然后像这样通过请求对象访问这个值:

class MyRequest(flask.Request):
def get_my_val(self):
return (self.url_rule.defaults or {}).get('_my_val', False)

但它看起来像一个 hack。

UPD: 看起来可以通过扩展 werkzeug.routing.Rule 类并将 **kwargs 添加到其构造函数来完成。可以覆盖 Flask 中的 Rule 类吗?

最佳答案

最终我重写了 flask 的 Request 和 Rule 类:

# here app is a Flask current application object
from flask import Request as FlaskRequest
from werkzeug.routing import Rule as FlaskRule

class Request(FlaskRequest):
def is_foo(self):
return bool(self.url_rule._foo) if self.url_rule else False

def get_bar(self):
return getattr(self.url_rule, '_bar')

class Rule(FlaskRule):
def __init__(self, *args, **kwargs):
for param in ('_foo', '_bar'):
setattr(self, param, kwargs.pop(param, None))
super().__init__(*args, **kwargs)

# app initialization
app.request_class = Request
app.url_rule_class = Rule

# route example
@app.route('/path', _foo=True, _bar='baz')
def route():
pass

关于python - 将一些任意值绑定(bind)到 Flask 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com