我知道之前已经问过这个问题.我已经尝试了几乎所有人给出的选项,但我似乎无法解决它.我是一个完整的新手所以请让我知道我哪里出错了.
我想写一个简单的原始形式.到目前为止,我还没有实现任何身份验证或会话机制(但是从我读过的内容看这个问题并不重要.如果我错了,请纠正我).
当我尝试提交表单时,出现此错误:
Forbidden (403) CSRF verification failed. Request aborted. Reason given for failure: CSRF cookie not set.
这是我的代码:
我的Views.py有这个方法:
def submit(request): global alphabet_array dishes = Dish.objects.all().order_by('name') if request.method == "POST": print request.POST['restaurant'] print request.POST['rating'] render_to_response('index.html', {}, context_instance=RequestContext(request)) else: render_to_response('index.html', {}, context_instance=RequestContext(request))
许多人说使用RequestContext解决了这个问题,但对我来说,即使这样也行不通.
模板如下所示:
settings.py中的middleware_classes如下所示:
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', )
django.middleware.csrf.CsrfViewMiddleware就在那里,它在'django.contrib.sessions.middleware.SessionMiddleware'下面
我的url.py有条目:
url(r'^admin/', include(admin.site.urls)), url(r'^index/$', 'testapp.views.index'), url(r'^starts_with/(?P.+)/dish/(?P \d+)/$', 'testapp.views.alphabet_dish'), url(r'^starts_with/(?P .+)/$', 'testapp.views.alphabet'), url(r'^submit/$', 'testapp.views.submit'),
我真的不确定这里有什么问题.正如我所说,我在这里阅读了类似的帖子并尝试了回复中提到的所有内容.我错过了什么?我的浏览器是Chrome,它接受Cookie.
您的CSRF设置很好.问题是你没有返回结果.请记住,视图是一个功能.你不仅需要return render_to_response(...)
调用它(这也是为什么通过删除CSRF你得到didn't return an HttpResponse
错误)
除此之外,你正在做一些同样错误的一般事情:
不要使用render_to_response(使用render).
不要重复自己.
不要在django中使用全局变量.
因此:
def submit(request): # global alphabet_array dishes = Dish.objects.all().order_by('name') if request.method == "POST": print request.POST['restaurant'] print request.POST['rating'] return render(request, 'index.html', {})