python - 在 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.py
too 。
这是我在此方法中的代码:
视图.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 中获取它们,但这也不起作用。
顺便说一句,我如何在视图之外使用会话?我在这里错过了什么吗?
解决方案
这是各种各样的错误。
您不应该直接实例化 SessionStore。按照你的做法,你没有给出任何关于你试图获取或设置哪个用户会话的指示。
相反,您应该通过request.session
.
request.session['test_session'] = 'this_is_my_test'
同样在模板中,您可以直接访问会话字典(不需要模板标签):
{{ request.session.test_session }}
推荐阅读
- c++ - 访问具有多个参数的引用数组?
- php - 从 Laravel 中的集合结果中获取相关数据
- go - 如何将 int 数组快速转换为字节数组?
- r - 尝试使用 R 中的概率和随机福雷斯特进行预测时收到错误
- python - Dash 中的布局和下拉菜单 - Python
- youtube-api - Youtube CC_lang_pref 似乎不起作用
- php - 为什么 PHP 爆炸总是在每个数组的末尾添加“换行符”?
- c - 我的单元测试无法使错误的逻辑崩溃
- python - Selenium webdriver 文件(Python)似乎丢失了
- flutter - 在 Flutter 中检测是否连接了物理键盘