python - 'SessionStore' 对象没有属性 'GET'
问题描述
这段代码有什么问题,它会产生以下错误:
> 'SessionStore' object has no attribute 'GET'
这是代码:
def blog_detail(request, blog_slug):
blog = get_object_or_404(Blog, slug=blog_slug)
session_key = 'blog_views_{}'.format(blog.slug)
if not request.session.GET.get('session_key', False)
blog.blog_views += 1
blog.save()
request.session['session_key'] = True
return render(request, 'blogs/blog-detail.html', {'blog':blog})
我认为我使用request.session
. 你能帮我吗,谢谢。
编辑:追溯
Environment:
Request Method: GET
Request URL: http://localhost:8000/dramatically-productivate-global-functionalities-whereas-reliable-internal-or-organic-sources
Django Version: 2.2.1
Python Version: 3.7.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blogs',
'users',
'crispy_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "E:\Practice\new-blog\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "E:\Practice\new-blog\lib\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "E:\Practice\new-blog\lib\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\Practice\new-blog\src\blogs\views.py" in blog_detail
53. if not request.session.GET.get('session_key', False):
Exception Type: AttributeError at /dramatically-productivate-global-functionalities-whereas-reliable-internal-or-organic-sources
Exception Value: 'SessionStore' object has no attribute 'GET'
解决方案
这里有两个错误:
- 您不能使用
request.session.GET.get(..)
,因为SessionBase
对象没有GET
属性;和 - 您使用了字符串文字
'session_key'
而不是标识符。
你可能想写:
def blog_detail(request, blog_slug):
blog = get_object_or_404(Blog, slug=blog_slug)
session_key = 'blog_views_{}'.format(blog.slug)
if not request.session.get(session_key, False):
blog.blog_views += 1
blog.save()
request.session[session_key] = True
return render(request, 'blogs/blog-detail.html', {'blog':blog})
我们可以使if
语句更短一些,因为.get(..)
默认情况下返回None
也具有真实性False
:
def blog_detail(request, blog_slug):
blog = get_object_or_404(Blog, slug=blog_slug)
session_key = 'blog_views_{}'.format(blog.slug)
if not request.session.get(session_key):
blog.blog_views += 1
blog.save()
request.session[session_key] = True
return render(request, 'blogs/blog-detail.html', {'blog':blog})
所以这里我们使用request.session.get(..)
并使用session_key
标识符,而不是文字。如果我们要使用'session_key'
,我们只需询问会话是否有密钥'session_key'
,而不是'blog_views_some-title'
.
推荐阅读
- .htaccess - 将.htaccess改写为Nginx配置格式,将不同的URL代理到不同的端口
- dataframe - AttributeError:“索引”对象没有属性“平均值”
- r - 有效计算连续唯一值的滚动数量
- numpy - 将火炬模型(torch.save)转换为可以用基本 Python 处理的矩阵公式
- jquery - 不能用 childer() / find() 改变孩子
- node.js - 我有 2 个不同的 NodeJs 服务器(A、B),如何在服务器 B 端点内调用服务器 A 端点?
- python - Python 变量命名约定
- php - UTF-8 编码文件名 PHP/MySQL 的奇怪行为
- regex - htaccess 重定向显示 404 未找到 jpg 文件的错误
- pdf - “混合 PDF 文件”使用什么标准?