【发布时间】:2019-05-16 21:41:13
【问题描述】:
我正在使用 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请求的url,并且必须检查exclude_urls中的退出
示例:如果请求的 url 是 https://www.example.com/login?query=1,则必须在该特定 url 中标识 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 时需要排除的两个网址
案例 1:
如果列表中存在 URL 并且会话为空并且用户有 REQUESTED demo/login url,我需要他重定向到他的 url demo/login url
案例 2:
如果用户请求的 URL 不是 list url_list 中提到的 URL。否则,我正在检查会话是否为空,然后我将用户重定向到 demo/login 页面[## 但用户正在进入连续的重定向循环我如何才能停止无限重定向##]
提前致谢
【问题讨论】:
-
这里没有正则表达式。正则表达式中的方括号(如果是的话)表示“字符列表”。所以 r'[admin]' 代码将匹配
a、d、m、i或n(len=1)。删除所有“正则表达式”尝试,获取 url 开头的子字符串并与简单列表进行比较以包含(您已经完成的操作)。 -
@Ivan Starostin 感谢您的回复。我在下面编辑了我的问题。请做必要的事情。
-
return redirect('login')? -
你想完成什么?禁止匿名访问除
login/register以外的所有页面? -
大写字母不会让模糊的想法更清晰。
标签: python regex django django-urls