Как сделать регулярное выражение Python? - PullRequest
1 голос
/ 16 июля 2010

Я работаю над классом loginMiddleware для Django.Этот промежуточный класс должен отправлять пользователя на страницу входа, когда он не вошел в систему.Но есть несколько исключений.

Поскольку я запускаю встроенный сервер django, мне пришлось создать медиа-URL.Но помните, что проблема заключается в том, что когда страница входа загружает файл javascript, файл javascript является страницей входа в систему, поскольку пользователь не вошел в систему.По этой причине я сделал заявление:

from django.http import HttpResponseRedirect
from django.conf import settings
import re
class loginMiddelware:
    def process_request(self,request):
        if request.path != settings.LOGIN_PATH and request.user.is_anonymous():
            if request.path.find('media') <= 0:
                return HttpResponseRedirect(settings.LOGIN_PATH)
            else:
                return None

Я имею в виду строку с: if request.path.find ('media') <= 0 :.Это работает, но я не считаю это хорошим методом.Я думаю, что я должен использовать регулярное выражение для этого.Так что я посмотрел на функцию re.match и попробовал разные мысли, но ничего не получалось.Я хочу регулярное выражение, которое позволяет только все URL, начинающиеся с / media / и заканчивающиеся одним из следующих расширений: js, css, png, gif или jpg. </p>

Как это возможно?

Спасибо!

Том

Ответы [ 3 ]

3 голосов
/ 16 июля 2010

Конечно:

DIRECT_ACCESS = re.compile(r'^/media/.*\.(js|css|png|gif|jpg)$')

...

if DIRECT_ACCESS.match(url):
    ...

Подсказка: если вы хотите убедиться, что ваше регулярное выражение работает, напишите пару модульных тестов, которые его выполняют.Таким образом, вы не получите никаких неприятных сюрпризов.

2 голосов
/ 16 июля 2010

Вам не нужно регулярное выражение:

if request.path.startswith('/path/to/your/media'):
    #do something

должно сработать.Вы жалуетесь на тот факт, что если путь запроса содержит:

/protected/secure/media/bla

, то ваше внедрение позволит пользователю пройти через него.достаточно для вашей проблемы.

1 голос
/ 16 июля 2010

Взгляните на Matt Grayson's Require Login Middleware . Это позволяет вам определить группу URL-адресов, которые не требуют входа в систему с использованием пользовательской настройки LOGIN_REQUIRED_URLS_EXCEPTIONS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...