首页 > 解决方案 > 在 django 视图中使用会话

问题描述

我在我的 Django 应用程序中 使用这个文档制作了一个自定义模板标签:

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

在 中myCustomTags.py,我需要使用 views.py 中的一些变量,
因此我将这些变量保存在 session 中,并尝试将它们放入myCustomTags.py,但注意到有效并且它无法识别我的会话。
我使用了这个文档,但似乎这个方法希望我使用 session_keys。在这种方法中,我的问题是如何使用没有密钥的会话或以某种方式将密钥从 views.py 传递到myCustomTags.pytoo 。

这是我在此方法中的代码:

视图.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}}

另一种方法是在views.py 中使用requst.sessions 并尝试在myCustomTags.py 中获取它们,但这也不起作用。

顺便说一句,我如何在视图之外使用会话?我在这里错过了什么吗?

标签: pythondjangopython-3.xdjango-sessions

解决方案


这是各种各样的错误。

您不应该直接实例化 SessionStore。按照你的做法,你没有给出任何关于你试图获取或设置哪个用户会话的指示。

相反,您应该通过request.session.

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

同样在模板中,您可以直接访问会话字典(不需要模板标签):

{{ request.session.test_session }}

推荐阅读