Skip to main content
 首页 » 编程设计

python之django 在列表中使用正则表达式排除 url

2024年12月31日26leader

我正在开发 django 2.1 版的中间件。它是 LoginMiddleWare,如果 请求的 url 退出,我需要排除一些 url,它返回 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) 

上述代码必须识别用户请求的 url request.path_info 并且必须检查 exclude_urls 中的导出

示例:如果请求的 url 是 https://www.example.com/login?query=1 这必须在该特定 url 中标识 login 并且必须返回 无

编辑 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") 

代码中的上述更改在一定程度上有效 现在的问题是它一次又一次地重定向到 https://www.example.com/demo/login 页面,我该如何阻止它。

编辑2

我想要实现的目标

admin/login 和 demo/login 目前是我在检查 session 是否在 middleware.py 中退出时需要排除的两个 url

案例 1: 如果 URL 存在于列表中并且 session 为空并且用户有 REQUESTED demo/login url 我需要他重定向到他的 url demo/login url

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

提前致谢

请您参考如下方法:

假设您使用的是 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')