gpt4 book ai didi

python - session 变量丢失,在 Django 中

转载 作者:行者123 更新时间:2023-12-04 15:40:55 25 4
gpt4 key购买 nike

在应该是多公司的系统中,我使用 context_processors.py 通过从边栏中选择来加载公司选项。用户可以随时更换公司。

当用户选择一家公司时,该选项会记录在 session 变量中。

碰巧当用户切换页面时,session变量的信息丢失了。

我做错了什么或没做什么?有更好的方法吗?

相关代码片段如下:

上下文处理器.py

from apps.client.models import Client

def units (request):
# Dictionary with business options
clients = Client.objects.values ​​(
"client_id",
"company_id__name",
)
clients_list = []
for client in clients:
clients_list.append (
{
'client_id': client ['client_id'],
'name': client ['company_id__name']
}
)
return {'clients_list': clients_list}

基础.html

# System base page.
# Displays the list of business options.
<select class = "form-control select2">
<option value = "{{request.session.unit_id}}"> {{request.session.unit_id}} </option>
{% for client in clients_list%}
<option value = "{{client.client_id}}"
{% if request.session.unit_id == client.client_id%}
selected
{% endif%}>
{{client.client_id}}
</option>
{% endfor%}
</select>
...

# Whenever a company is selected ...
<script>
$ ("# select_unit"). click (function () {
var option_id = $ (this) .val ();
var url = "{% url 'home: set_unit'%}";
$ .ajax ({
type: "GET",
url: url,
data: {'unit_id': option_id},
success: function () {}
});
});
</script>

View .py

# View that registers the variable in the session.
def set_unit (request):
unit_id = request.GET.get ("unit_id")
request.session ['unit_id'] = unit_id

设置.py

MIDDLEWARE = [
'apps.core.middleware.AppMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_globals.middleware.Global',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'apps.home.context_processors.units',
],
},
}
]

最佳答案

设置 session 变量的 View 需要返回响应。由于您使用 Ajax 调用它,因此使用简单的 {'status': 'ok'} 字典的 JsonResponse 就可以了。在 set_unit 的末尾添加这一行:

return JsonResponse({'status': 'ok'})

如果您查看浏览器开发工具的网络选项卡或控制台,您会看到当前您的请求正在生成错误,因为 View 不应返回 None。这就是 session 未保存且 session 变量的新状态未保留的原因。

关于python - session 变量丢失,在 Django 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com