在 Django 中使用 request.session['value'] 时出现 KeyError
Getting KeyError when using request.session['value'] in django
我正在尝试编写会话并想从 django 中的另一个视图函数读取会话。我正在使用 Django 3.1.5。 这是我的 views.py 代码,我在用户登录后设置了一个会话 request.session['value'] = 'istiak'
def loginPage(request):
if request.user.is_authenticated:
return redirect('home')
else:
if request.method == 'POST':
username = request.POST.get('username')
password =request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
request.session['value'] = 'istiak'
return redirect('home')
else:
messages.info(request, 'Username OR password is incorrect')
context = {}
return render(request, 'library_site/login.html')
并且在这个视图中我试图获取这个会话数据。代码->usern = request.session['value']
def bookprofile(request):
usern = request.session['value']
return render(request, 'library_site/bookprofile.html')
但我收到错误 KeyError: 'value'
。这里是完整的错误
Traceback (most recent call last):
File "C:\python\Python38\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\python\Python38\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "B:\django\Django_Project\Library\library\library_site\views.py", line 31, in bookprofile
usern = request.session['value']
File "C:\python\Python38\lib\site-packages\django\contrib\sessions\backends\base.py", line 65, in __getitem__
return self._session[key]
KeyError: 'value'
您收到该错误是因为您访问了 session
中不存在的密钥。
您可能需要考虑对您的代码进行一些修改:
if user is not None
在您的登录视图中将始终是 True
,它只会 return 和 AnonymousUser
.
- 您似乎可以访问
bookprofile
视图,而无需登录或之前设置 session['value']
值。您可以通过将 session['value']
替换为 session.get('value', 'defaultValueHere')
来为其设置默认值。另一种选择是在未登录时限制访问 bookprofile
视图。您可以通过在视图上添加装饰器 @login_required
来实现此目的:
from django.contrib.auth.decorators import login_required
@login_required
def bookprofile(request):
usern = request.session['value']
return render(request, 'library_site/bookprofile.html')
我正在尝试编写会话并想从 django 中的另一个视图函数读取会话。我正在使用 Django 3.1.5。 这是我的 views.py 代码,我在用户登录后设置了一个会话 request.session['value'] = 'istiak'
def loginPage(request):
if request.user.is_authenticated:
return redirect('home')
else:
if request.method == 'POST':
username = request.POST.get('username')
password =request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
request.session['value'] = 'istiak'
return redirect('home')
else:
messages.info(request, 'Username OR password is incorrect')
context = {}
return render(request, 'library_site/login.html')
并且在这个视图中我试图获取这个会话数据。代码->usern = request.session['value']
def bookprofile(request):
usern = request.session['value']
return render(request, 'library_site/bookprofile.html')
但我收到错误 KeyError: 'value'
。这里是完整的错误
Traceback (most recent call last):
File "C:\python\Python38\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\python\Python38\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "B:\django\Django_Project\Library\library\library_site\views.py", line 31, in bookprofile
usern = request.session['value']
File "C:\python\Python38\lib\site-packages\django\contrib\sessions\backends\base.py", line 65, in __getitem__
return self._session[key]
KeyError: 'value'
您收到该错误是因为您访问了 session
中不存在的密钥。
您可能需要考虑对您的代码进行一些修改:
if user is not None
在您的登录视图中将始终是True
,它只会 return 和AnonymousUser
.- 您似乎可以访问
bookprofile
视图,而无需登录或之前设置session['value']
值。您可以通过将session['value']
替换为session.get('value', 'defaultValueHere')
来为其设置默认值。另一种选择是在未登录时限制访问bookprofile
视图。您可以通过在视图上添加装饰器@login_required
来实现此目的:
from django.contrib.auth.decorators import login_required
@login_required
def bookprofile(request):
usern = request.session['value']
return render(request, 'library_site/bookprofile.html')