私信  •  关注

noble

noble 最近回复了
5 年前
回复了 noble 创建的主题 » 我怎样才能在django settings.py中尊重url

我想我终于明白了。问题在于自定义登录中间件 过程视图功能。我应该导入“re”模块,然后改为执行此操作

from django.conf import settings
from django.shortcuts import redirect,render
from django.urls import reverse
import re

EXEMPT_URLS = [re.compile(url) for url in settings.LOGIN_EXEMPT_URLS]     

class LoginRequired:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self,request):
        response = self.get_response(request)
        return response

    def process_view(self, request, view_func, view_args, view_kwargs,):
        assert hasattr(request, 'user')
        path = request.path_info.lstrip('/')

        url_is_exempt = any(url.match(path) for url in EXEMPT_URLS)

        if request.user.is_authenticated and url_is_exempt:
            if path == reverse('accounts:homepage').lstrip('/'):
                return None
            return redirect(settings.LOGIN_REDIRECT_URL)

        elif request.user.is_authenticated or url_is_exempt:
            return None

        else:
            return redirect(settings.LOGIN_REDIRECT_URL).

主要方面是

EXEMPT_URLS = [re.compile(url) for url in settings.LOGIN_EXEMPT_URLS]

url_is_exempt = any(url.match(path) for url in EXEMPT_URLS)

有了这个我就可以匹配网址了