использовать сеансы вне представлений Django - PullRequest
0 голосов
/ 25 февраля 2019

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

myproject/
    __init__.py
    models.py
    templatetags/
        __init__.py
        myCustomTags.py
    views.py

в myCustomTags.py, мне нужно использоватьнекоторые переменные, которые есть в views.py
, поэтому я сохранил эти переменные в сеансе и попытался получить их в myCustomTags.py, но пометка сработала, и он не распознал мои сеансы.
Я использовал this doc, но, похоже, этот метод хочет, чтобы я использовал session_keys.в этом методе мой вопрос заключается в том, как использовать сеансы без ключа или как-то передать ключи из views.py в myCustomTags.py тоже.

вот мой код в этом методе:

views.py:

from importlib import import_module
from django.conf import settings
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
from django.contrib.sessions.backends.db import SessionStore
my_session = SessionStore()

def user_login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        # some process to validate and etc...
        my_session['test_session'] = 'this_is_my_test'
        my_session.create()
        return redirect(reverse('basic_app:index'))

myCustomTags.py

from django import template
from importlib import import_module
from django.conf import settings
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
from django.contrib.sessions.backends.db import SessionStore

my_session = SessionStore()
register = template.Library()

@register.simple_tag
def userStatusMode():
    status = my_session['test_session']
    return status

base.html :

{% load dynamic_vars %}
{% userStatusMode as user_status_thing %}
 <!-- and somewher in base.html -->
{{user_status_thing}}

другим методом было использование requst.sessions в views.py и попытка получить их в myCustomTags.py, который не сделалтоже не работает.

кстати, как я могу использовать сессию вне представлений?я что-то здесь упускаю?

1 Ответ

0 голосов
/ 25 февраля 2019

Это все виды ошибок.

Вы не должны создавать экземпляр SessionStore напрямую.Таким образом, вы не указали , какой сеанс пользователя вы пытаетесь получить или установить.

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

request.session['test_session'] = 'this_is_my_test'

и аналогично в шаблоне, где вы можете напрямую получить доступ к сеансу dict (нет необходимости в теге шаблона):

{{ request.session.test_session }}
...