【发布时间】:2020-10-10 15:31:45
【问题描述】:
我知道 Django 有一些应用程序可以处理 cookie,但我想手动处理。我有一个只有两个 cookie 的 Django 应用程序:csrftoken 和 sessionid。
我想添加一个 cookie 同意横幅,用户可以在其中阻止所有 cookie。我该怎么做?
【问题讨论】:
我知道 Django 有一些应用程序可以处理 cookie,但我想手动处理。我有一个只有两个 cookie 的 Django 应用程序:csrftoken 和 sessionid。
我想添加一个 cookie 同意横幅,用户可以在其中阻止所有 cookie。我该怎么做?
【问题讨论】:
从 django 导入 @csrf_extempt。
from django.views.decorators.csrf import csrf_exempt
要让视图不使用 csrf 标记,请执行此操作。 (注意:您必须为每个没有 csrf 令牌的视图执行此操作)
@csrf_exempt
def viewGoesHere(request):
pass
要禁用会话 cookie,您需要更换中间件。 (使cookie起作用的东西)。所以把这段代码作为代码本身放在那里。
from django.contrib.sessions.middleware import SessionMiddleware
from django.conf import settings
class NewSessionMiddleware(SessionMiddleware):
def process_response(self, request, response):
response = super(NewSessionMiddleware, self).process_response(request, response)
# You have access to request.user in this method
if not request.user.is_authenticated():
del response.cookies[settings.SESSION_COOKIE_NAME]
return response
你需要用'django.contrib.auth.middleware.AuthenticationMiddleware'替换'myapp.middleware.SessionMiddleware'
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'myapp.middleware.NewSessionMiddleware', # This is the new middleware
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)
【讨论】: