Ключ сеанса отсутствует в django? - PullRequest
0 голосов
/ 30 марта 2020

Я пытался использовать Cook ie сеансов для сохранения данных пользователя, я успешно использовал сеанс в моих предыдущих приложениях, но на этот раз он не работает должным образом

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

Итак, что я делал раньше, это создавал миксин и использовал его для вызова того представления, в котором мне нужен сеансовый ключ. захватите ключ сеанса и сохраните это значение в поле экземпляра, но ключ сеанса равен None, или, если я изменю свой код на то, что я написал внизу, он создает новый ключ сеанса при каждом запросе

Вот mixin, который я использовал в своих предыдущих приложениях, и он работал нормально

class SessionMixin:
    def get_session(self,request,*args,**kwargs):
        session = self.request.session
        if not session.get('has_session'):
            session["has_session"] = True
            return self.__class__.get(self,request,*args,**kwargs)

class MyView(SessionMixin,generic.View):
    def get(self,request,*args,**kwargs):
           super().get_session(self,request,*args,**kwargs)
           print(self.request.session.session_key,"Gives me none")
           # rest of the code goes here

Мои настройки для файлов cookie сеанса

SESSION_COOKIE_AGE = 604800  
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

Вот то, что я тоже пробовал, но он просто создавал ключ сеанса для каждого отдельного запроса .

class SessionMixin:
    def get(self,request,*args,**kwargs):
        session = self.request.session
        if not session.session_key:
            session.save() 

1 Ответ

0 голосов
/ 30 марта 2020

Ваш метод get в не вызывает метод get_session(...). Кроме того, вы можете сделать реализацию следующим образом:

class SessionMixin:
    def get_session(self,request,*args,**kwargs):
        if not request.session.session_key:
            request.session.create()
        return request

class MyView(SessionMixin,generic.View):
    def get(self,request,*args,**kwargs):
       self.get_session(request)
       print(request.session.session_key)
       return super().get(request,*args,**kwargs)

Я использую метод create() вместо save(). Потому что он предназначен для создания новой сессии. Более подробную информацию можно найти в документации .

...