4

您好,提前谢谢您。这是来自以下线程的后续问题(不确定我是否应该在那里发布或开始一个新线程......:

即使我有 {% csrf_token %},CSRF 令牌也丢失或不正确

我不确定我需要对代码做什么才能使 csrfContext 工作。我正在尝试使用 ModelForm 将数据收集到模型并将其写入 MYSQL 表。我收到错误:

失败原因:
    CSRF 令牌丢失或不正确。

这是代码:

    从 django.shortcuts 导入 render_to_response
    从 djengo.template 导入 RequestContext
    从 django.http 导入 HttpResponse、HttpRequest、HttpResponseRedirect
    从 acmetest.models 导入播放器
    从 acmetest.models 导入 PickForm

    csrfContext = RequestContext(请求)
    return render_to_response('makepick.html', csrfContext)

    def playerAdd(request, id=None):
        form = PickForm(request.POST or None,
                           instance=id 和 Player.objects.get(id=id))

        # 保存新的/编辑的选择
        如果 request.method == 'POST' 和 form.is_valid():
            form.save()
            返回 HttpResponseRedirect('/draft/')

        return render_to_response('makepick.html', {'form':form})

再次,

感谢您的帮助!

德普克林

4

2 回答 2

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})
于 2012-01-26T04:58:20.663 回答
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从功能块外部使用。

于 2012-01-26T03:22:51.400 回答