CSRF令牌跟进
你好,感谢你的帮助。这是一个跟之前讨论相关的问题(我不确定我该在那儿发帖还是重新开个新帖……):
即使我有{% csrf_token %},也出现CSRF令牌缺失或不正确的错误
我不太清楚该如何处理代码才能让csrfContext正常工作。我正在尝试使用ModelForm来收集数据并将其写入MYSQL表格。可是我遇到了这个错误:
Reason given for failure: CSRF token missing or incorrect.
这是我的代码:
from django.shortcuts import render_to_response from djengo.template import RequestContext from django.http import HttpResponse, HttpRequest, HttpResponseRedirect from acmetest.models import Player from acmetest.models import PickForm csrfContext = RequestContext(request) return render_to_response('makepick.html', csrfContext) def playerAdd(request, id=None): form = PickForm(request.POST or None, instance=id and Player.objects.get(id=id)) # Save new/edited pick if request.method == 'POST' and form.is_valid(): form.save() return HttpResponseRedirect('/draft/') return render_to_response('makepick.html', {'form':form})
再次感谢你的帮助!
dpbklyn
2 个回答
0
我假设我们在讨论的是 playerAdd
这个视图 - 你需要把 RequestContext
传递给那里的响应。
def playerAdd(request, id=None):
form = PickForm(request.POST or None,
instance=id and Player.objects.get(id=id))
# Save new/edited pick
if request.method == 'POST' and form.is_valid():
form.save()
return HttpResponseRedirect('/draft/')
return render_to_response('makepick.html', RequestContext(request, {'form':form}))
你代码的前几行很难理解,甚至看起来都不是有效的 Python 代码。你不能在一个函数外面使用 return
。
2
把你的代码更新成这样:
from django.shortcuts import render
# from djengo.template import RequestContext <- this is not valid.
正如Yuji所指出的,这两行代码在Python中是不合法的,而且如果你使用了render
这个快捷方式,它们其实也没必要。
# csrfContext = RequestContext(request)
# return render_to_response('makepick.html', csrfContext)
修改你的返回行:
# return render_to_response('makepick.html', {'form':form})
return render(request,'makepick.html',{'form':form})