Подтвердить что ты не робот

Отключить создание сеанса в Django

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

4b9b3361

Ответ 1

Тривиальное решение заключается в том, чтобы ваш веб-сервер различал вызовы 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".

Ответ 2

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

Ответ 3

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

request.session.save = lambda: None

Тривиальный, работает.

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