Python 什么';使用Flask从站点地图中排除路由的最佳方法是什么?
获取用于构建站点地图的所有路由的列表很简单,例如,Python 什么';使用Flask从站点地图中排除路由的最佳方法是什么?,python,flask,Python,Flask,获取用于构建站点地图的所有路由的列表很简单,例如,rules=current\u app.url\u map.iter\u rules()。但我的应用程序中有许多路由是用于管理功能的,这些路由应该从站点地图中排除(XML和人类可读)。所有这样的管理路由都有一个decorator@auth\u角色(…)(如下所示,这与中描述的所需的@login\udecorator非常相似)。URL没有将其与其他非管理URL区分开来的特殊段。因此,我希望能够过滤路由,以排除那些指向同样具有@auth\u角色(…)
rules=current\u app.url\u map.iter\u rules()
。但我的应用程序中有许多路由是用于管理功能的,这些路由应该从站点地图中排除(XML和人类可读)。所有这样的管理路由都有一个decorator@auth\u角色(…)
(如下所示,这与中描述的所需的@login\u
decorator非常相似)。URL没有将其与其他非管理URL区分开来的特殊段。因此,我希望能够过滤路由,以排除那些指向同样具有@auth\u角色(…)
decorator的视图函数的路由。这样做有意义吗?如果是,如何做到这一点?如果没有,我是否应该修改所有行政路线,将其与公共消费路线区分开来
def auth_role(roles):
def _auth_role_required(f):
@wraps(f)
def _inner(*args, **kwargs):
try:
if g.user is None:
flash(u'You must login to access the requested resource.', CSS.ERR)
path = urlsplit(request.url).path
if path in ['', '/', '/admin']:
return redirect('/admin/login')
else:
return redirect('/admin/login?d=%s' % path)
if not g.user.is_active():
flash(u'Your account is no longer active.', CSS.ERR)
return abort(403)
if not g.user.is_authorized(roles):
flash(u'Your current role does not grant access to this resource.', CSS.ERR)
return abort(403)
except KeyError:
return abort(401)
return f(*args, **kwargs)
return _inner
return _auth_role_required
您可以修改decorator,使其也在“未映射”列表中注册目标函数。然后,您可以从路线的大列表中减去该列表 例如:
def auth_role(roles):
def _auth_role_required(f):
@wraps(f)
# add to not_mapped list
register_not_mapped(f.__name__)
def _inner(*args, **kwargs):
# ...
return _inner
return _auth_role_required
米格尔。这很有趣。我将尝试一下,看看它是如何工作的。谢谢