Python 在django中使用request.session[';value';]时获取密钥错误

Python 在django中使用request.session[';value';]时获取密钥错误,python,django,django-models,django-views,django-sessions,Python,Django,Django Models,Django Views,Django Sessions,我正在尝试编写会话,并希望从django中的另一个视图函数读取会话。我正在使用Django3.1.5这是我的views.py代码,我在用户登录请求后设置了一个会话。会话['value']='istiak' def loginPage(request): if request.user.is_authenticated: return redirect('home') else: if request.method == 'POST':

我正在尝试编写会话,并希望从django中的另一个视图函数读取会话。我正在使用Django3.1.5这是我的views.py代码,我在用户登录请求后设置了一个会话。会话['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')
在此视图中,我尝试获取此会话数据。Code->usern=request.session['value']

但是我得到了错误
KeyError:'value'
。这是全部错误


由于在
会话
中访问不存在的密钥,因此会出现该错误

您可能想考虑对代码进行一些修改:

  • 如果用户在您的登录视图中不是None
    将始终是
    True
    ,它将只返回一个
    匿名用户
  • 您似乎可以访问
    bookprofile
    视图,而无需登录或之前设置
    会话['value']
    值。您可以通过将
    会话['value']
    替换为
    session.get('value','defaultValueHere')
    来为此设置默认值。另一个选项是在未登录时限制对
    bookprofile
    视图的访问。您可以通过在视图中添加decorator
    @login\u required
    来实现这一点:
  • 从django.contrib.auth.decorators导入登录名\u必需
    @需要登录
    def bookprofile(请求):
    usern=request.session['value']
    返回渲染(请求“library\u site/bookprofile.html”)
    
    您确实启用了
    SessionMiddleware
    吗?我必须指出,如果用户不是None,则
    将始终为真。用户只是匿名的。如果user.is\u autenticated
    ,您可能需要测试
    。是。我按照你的指示解决了这个问题。非常感谢。请将此问题标记为正确以结束主题。谢谢
    
    def bookprofile(request):
        usern = request.session['value']    
        return render(request, 'library_site/bookprofile.html')
    
    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'