【发布时间】:2016-04-02 14:31:27
【问题描述】:
我正在尝试按照docs 将 AJAX POST 与 Django 一起使用 - 如果我登录到该站点,这可以正常工作。但是,如果我已注销或使用隐身模式,我的 csrftoken 未设置 - 我已尝试将 {{csrf_token}} 进行检查,它返回值 NOTPROVIDED。
什么可能导致令牌不生成?
- 我正在使用
render,所以我认为它不是context processor issue -
django.middleware.csrf.CsrfViewMiddleware存在,我没有更改任何默认 csrf 设置 -
ensure_csrf_cookie装饰器工作正常
我正在运行 Django 1.7。
视图的简化版本(没有ensure_csrf_cookie 装饰器):
def pg2(request, **kwargs):
name_slug = kwargs.pop('name_slug')
num_guests = request.session['guests']
date = request.session['date']
venue = get_object_or_404(Venue, name_slug=name_slug)
try:
rental = request.session['rental']
except:
rental = None
filtered_items = Item.objects.filter(venue_id=venue.pk)
context = {'venue':venue, 'rental':rental, 'filtered_items':filtered_items}
return render(request, 'app/pg2.html', context)
我在设置中的中间件:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'project.middleware.SecureRequiredMiddleware', # to add SSL
)
【问题讨论】:
-
您也可以阅读有关使用ajax in the Django docs 的信息;如果您使用的是 jQuery,here is a wrapper 会为您服务。
-
感谢@thornomad,如前所述,我正在关注文档中的代码。什么不起作用是 csrftoken 甚至没有首先生成 - 已经更新了问题。
-
也许然后发布您的代码,特别是
views.py。什么版本的 Django?