Отключить создание сессии в Django - PullRequest
17 голосов
/ 29 октября 2010

Я хочу отключить автоматическое создание сеанса в Django для определенных URL-адресов.У меня есть / api / * и каждый клиент, который попадает, получает новый сеанс Django.Есть ли способ игнорировать определенные URL-адреса?

Ответы [ 3 ]

17 голосов
/ 29 октября 2010

Тривиальное решение этой проблемы состоит в том, чтобы ваш веб-сервер различал вызовы API и обычные вызовы, а затем имел два разных экземпляра WSGI вашего приложения: один с включенными сеансами, другой с отключенными сеансами.(Вероятно, это гораздо проще с Nginx, чем с Apache.)

Альтернативой является наследование SessionMiddleware и последующее редактирование функций процесса, чтобы игнорировать все запросы, соответствующие вашим критериям.Что-то вроде:

from django.contrib.sessions.middleware import SessionMiddleware

class MySessionMiddleware(SessionMiddleware):
    def process_request(self, request):
        if request.path_info[0:5] == '/api/':
            return
        super(MySessionMiddleware, self).process_request(request)

    def process_response(self, request, response):
        if request.path_info[0:5] == '/api/':
            return response
        return super(MySessionMiddleware, self).process_response(request, response)

И затем отредактируйте файл настроек так, чтобы MIDDLEWARE_CLASSES содержал путь к «MySessionMiddleware», а не «django.contrib.sessions.middleware.SessionMiddleware».

3 голосов
/ 24 августа 2014

Я проголосовал за принятый ответ, но учтите, что вы также можете использовать метод decorator_from_middleware для выборочного включения промежуточного программного обеспечения для каждого просмотра. См. Ответы StackOverflow на Неглобальное промежуточное ПО в Django для получения более подробной информации.

1 голос
/ 04 ноября 2016

Также возможно в пользовательском промежуточном программном обеспечении или в любом другом месте просто переопределить request.session.save метод перед обработкой ответа в SessionMiddleware, где метод вызывается.действительно работает.

Преимущество этого подхода, хотя он де-факто является хаком, состоит в том, что объект сеанса все еще доступен и может использоваться обычным способом без необходимости каких-либо дальнейших изменений в коде.1007 *

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