Django使用列表中的正则表达式排除URL

时间:2018-12-16 05:32:19

标签: python regex django django-urls

我正在使用Django 2.1版开发Middleware。如果LoginMiddleWare返回requested url exits

,这是None,我需要排除一些网址

下面是中间件代码的一部分:middleware.py

def process_view(self, request, view_func, view_args, view_kwargs):
    exclude_urls = [r'[admin]', r'[login]', r'[register]', r'[demo]']

    if(request.path_info in exclude_urls):
        print('BELOW IS EXCLUDED URL')
        print(request.path_info)
        return None
    else:
        print('BELOW IS NOT EXCLUDED URL')
        print(request.path_info)

上面的代码必须标识用户request.path_info请求的网址,并且必须检查exclude_urls的出口

示例:如果请求的网址为https://www.example.com/login?query=1,则必须在该特定网址中标识login,并且必须返回None

编辑1

在查看我的代码后,下面提供了一个解决方案

    url_list = [
        'admin/login',
        '/demo/login'
    ]

    requested_path = request.path_info
    print('requested path :'+requested_path)
    for i in url_list:
        r1 = re.findall(r'^'+requested_path, i)
        print(len(r1))

        if len(r1) > 0:
            return None
        else:
            if not request.session.get('user_logged', None):
                print("Session Empty")
                return redirect('login') //HERE USER IS GOING INTO CONTINUOUS REDIRECT LOOP HOW CAN I STOP INFINITE REDIRECTS
            else:
                print("Session Exits")

以上某些NOW THE ISSUE IS IT REDIRECTING TO https://www.example.com/demo/login扩展页中代码工作的更改一次又一次如何停止。

编辑2

我想要实现的目标

admin/login and demo/login当前是我在检查session exits in middleware.py

时需要排除的两个URL

案例1:           如果列表和会话中存在URL空,并且用户拥有REQUESTED demo/login url,则我需要他重定向到他的URL demo/login url

案例2:           如果用户请求的URL不是list url_list中提到的URL。在其他情况下,我正在检查会话是否很空,然后才将用户重定向到demo/login页[##但用户将进入连续的重定向循环,我如何才能停止无限次重定向##]

感谢

1 个答案:

答案 0 :(得分:0)

假设您正在使用named urls,则可以这样使用它:

url_list = [
    'admin:login',
    'demo:login'
]

curl = request.resolver_match.view_name
if curl in url_list:
   if request.session.get('user_logged'):
       return redirect('/already-logged-in')  # make a new url for this
else:
   if not request.session.get('user_logged'):
       return redirect('/login')