Python django set_test_cookie无法设置cookie 问题:
在django视图中使用无法实际设置测试cookie,我不知道为什么 复制步骤 实际项目要比这复杂得多,但是,在一个近乎空白的项目中,误差是可以重现的 壳 设置.py url.py polls/views.py 壳 浏览器Python django set_test_cookie无法设置cookie 问题:,python,django,Python,Django,在django视图中使用无法实际设置测试cookie,我不知道为什么 复制步骤 实际项目要比这复杂得多,但是,在一个近乎空白的项目中,误差是可以重现的 壳 设置.py url.py polls/views.py 壳 浏览器 转到localhost:8000/login/注意,get请求没有显示名为testcookie且值为worked的响应cookie,根据set\u test\u cookie实际上,它是有效的!您可能希望在禁用cookies的情况下访问您的网站,并亲自查看 无论如何,解释如下
转到localhost:8000/login/注意,get请求没有显示名为
testcookie
且值为worked
的响应cookie,根据set\u test\u cookie
实际上,它是有效的!您可能希望在禁用cookies的情况下访问您的网站,并亲自查看
无论如何,解释如下:
如果查看set\u test\u cookie
的源代码,您会注意到它实际上在当前会话中设置了一个变量,而不是cookie或任何东西(至少不是直接设置的)
下面是它的工作原理:
set\u test\u cookie
,将test\u cookie\u NAME
和test\u cookie\u value
键添加到当前会话中\uuuuuu setitem\uuuu
方法),因此(2)TEST\u COOKIE\u NAME
是否恰好位于会话数据中,并且具有正确的值李>
如果是这样,则意味着我们能够从您的请求中检索您的会话,因此我们用于标识您的sessionid cookie被发回(以免我们无法检索您的会话),因此您必须支持cookie
希望这能让你更清楚;如果没有,我认为您应该详细了解HTTP的工作原理
笔记
(1) 或者无论会话\u COOKIE\u名称设置如何。(2) 实际上,如果
session\u SAVE\u EVERY\u REQUEST
设置为true,即使会话未被更改,也会发送sessionid cookie您是一位绅士和学者。一、 另一方面,我聪明到可以做傻事。我阅读了set_test_cookie源代码,但仍然在考虑浏览器cookie-因为名称-而不是会话变量!将SESSION\u COOKIE\u SECURE
设置为True
也可以在开发中发出请求。SESSION.test\u COOKIE\u worked()
返回False
。
$ virtualenv venv
$ source venv/bin/activate
(venv)$ pip install django
(venv)$ django-admin.py startproject hellodjango .
(venv)$ python manage.py startapp polls
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'database.db', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^login/$', 'hellodjango.polls.views.login'),
)
from django.shortcuts import render_to_response
from django.http import HttpResponse
def login(request):
if request.method == 'POST':
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
return HttpResponse("You're logged in.")
else:
return HttpResponse("Please enable cookies and try again.")
request.session.set_test_cookie()
return HttpResponse("Look ma, no cookies!")
(venv)$python manage.py runserver