如何检查urlpatterns列表中的当前url?

时间:2017-10-20 09:48:12

标签: django django-urls

我有点疑惑。我想检查网站的当前网址是否在我的网址表的特定子集中。 django的哪个功能会这样做?这是一个中间件,在移动到我的网站的特定部分之前请求其他信息。

class AuthorityMiddleware(object):
    def process_request(self, request):
        current_url = request.path_info
        if not request.user.is_anonymous() and current_url not in exclude_list:
            if not request.session.get('authority'):
                return get_the_authority(request)

排除列表应如何与urls.py中定义的urlpatterns相关?

1 个答案:

答案 0 :(得分:0)

好的,我的问题基本上是设计糟糕的结果。如果我使用装饰器来询问需要它的视图的权限,那么整个问题就可以解决了。回到我编写上述代码时,我认为中间件是唯一可以在显示视图之前重定向并调用其他函数的地方,但事实上,将函数应用于所有视图是很好的。如果函数仅适用于视图子集,则装饰器会更好。

from django.core.urlresolvers import reverse, resolve
from django.http import HttpResponseRedirect


def project_required(func):
    def decorated(request, *args, **kwargs):
        if not request.session.get('authority'):
            request.session['previous_url'] = resolve(request.path_info).url_name
            return HttpResponseRedirect(reverse('project_login'))
        return func(request, *args, **kwargs)
    return decorated