我正在开发 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')
