Django сохраняет HTTP_REFERER, чтобы использовать его в качестве информации целевой страницы - PullRequest
2 голосов
/ 13 февраля 2012

Я хотел бы знать, есть ли лучшее решение для этого.

На веб-сайте, который я создаю, есть несколько форм, которые нуждаются в информации о странице, которую пользователь начал в своем дневнике. Прямо сейчас я сохраняю HTTP_REFERER в сеансе и использую его позже. Недостатком является необходимость set_expiry (0), который очищает сеанс при закрытии браузера. Мне нравится поведение, при котором пользователям не нужно входить в систему каждый раз, когда они закрывают браузер.

Я написал небольшой класс промежуточного программного обеспечения, который выглядит следующим образом:

class RefererMiddleware(object):
    def process_response(self, request, response):
        try:
            if not request.session.get('http_landingpage'):
                request.session['http_landingpage'] = request.META.get('HTTP_REFERER')
                request.session.set_expiry(0)
        except Exception:
            pass
        return response

Есть предложения по улучшению? Другие решения?

1 Ответ

1 голос
/ 13 февраля 2012

Как насчет установки cookie , срок действия которого истекает при закрытии браузера.Вы можете сделать это в промежуточном программном обеспечении, и в конце сеанс останется нетронутым.

#Usage: response.set_cookie( 'cookie_name', 'cookie_value' )

class RefererMiddleware(object):
    def process_response(self, request, response):
        if not request.COOKIES.has_key( 'HTTP_REFERER' ):
            response.set_cookie( 'HTTP_REFERER', request.META.get('HTTP_REFERER') )
        return response
...