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

米格尔。这很有趣。我将尝试一下,看看它是如何工作的。谢谢