0

我正在通过创建一个博客站点来学习 Django。但是当尝试使用基于函数的视图创建帖子时,CSRF 验证失败。

使用csrf_exempt装饰器我可以创建没有错误的帖子。但是为了安全需要使用 CSRF 保护,有人可以帮忙解决吗?

Django=1.11.5
Python=3.6.8

视图.py

def post_create(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.author = request.user
            new_post.save()
            return HttpResponseRedirect('/')
    else:
        form = PostForm()
    return render_to_response('create.html',{ 'form': form })

创建.html

<h2>Create your post here.</h2>
<form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
     {{ form.as_p }}
     <input type="submit" value="CREATE">
</form>
4

3 回答 3

0

在您的settings.pyinMIDDLEWARE部分中添加以下内容:

'django.middleware.csrf.CsrfViewMiddleware',
于 2019-02-17T16:32:58.733 回答
0

你不应该使用render_to_response. 使用render哪个运行上下文处理器,例如插入 csrf 令牌的处理器。

return render (request, 'create.html',{ 'form': form })
于 2019-02-17T16:47:01.580 回答
0

通过用 render 替换 render_to_response 可以清除这个 CSRF 验证失败。但不知道它是如何工作的?有人解释一下是怎么回事吗?

于 2019-02-17T17:21:55.263 回答