我想为Flask路由创建一个装饰器,将某些路由标记为公共路由,所以我可以执行以下操作:
@public
@app.route('/welcome')
def welcome():
return render_template('/welcome.html')
在其他地方,这就是我认为装饰器和检查的样子:
_public_urls = set()
def public(route_function):
# add route_function's url to _public_urls
# _public_urls.add(route_function ...?.url_rule)
def decorator(f):
return f
def requested_url_is_public():
from flask import request
return request.url_rule in _public_urls
然后,当发出请求时,我有一个上下文函数来检查requested_url_is_public
.
我有点难过,因为我不知道如何在public
装饰器中获取给定函数的 url 规则。
也许这不是 Flask 的最佳设计选择,但我希望有另一种简单而优雅的方式来实现这一点。
我以前见过这样的模式,并想模仿它。例如,这是 Djangologin_required
装饰器的对应物。
我很喜欢阅读这方面的想法。