Django исключить URL с помощью регулярного выражения в списке - PullRequest
0 голосов
/ 16 декабря 2018

Я работаю над Middleware в версии 2.1 для Django.Это LoginMiddleWare, где мне нужно исключить некоторые URL, если 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)

Вышекод должен идентифицировать URL, запрошенный пользователем request.path_info, и должен проверять выходы в exclude_urls

ПРИМЕР: если запрошенный URL равен https://www.example.com/login?query=1, это должно идентифицировать login в этом конкретном URL и должно возвращать 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 В настоящее время я хочу исключить два URL-адреса при проверке, если session exits in middleware.py

Случай 1: если URL существует в списке, а сессия пуста, и пользователь имеет REQUESTED demo/login URL, который мне нужен, чтобы он перенаправил на свой URL demo/login url

Случай 2: если запрашиваемый пользователем URL является другим, чем URLНАМЕРЕНО В list url_list.В противном случае я проверяю, пуста ли сессия, затем я переадресовываю пользователя на страницу demo/login [## НО ПОЛЬЗОВАТЕЛЬ ВХОДИТ В НЕПРЕРЫВНУЮ ПЕРЕНОСНУЮ ПЕРСПЕКТИВУ, КАК МОЖНО ОСТАНОВИТЬ БЕСКОНЕЧНЫЕ ПЕРЕНОСЫ ##]

СПАСИБОADVANCE

1 Ответ

0 голосов
/ 16 декабря 2018

Если вы используете с именем 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')
...