Django 1.11.5中基于CSRF验证的基于函数的视图失败

时间:2019-02-17 16:16:35

标签: django csrf-token

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

使用csrf_exempt装饰器,我可以无错误地创建帖子。但是出于安全性需要使用CSRF保护,请问有人可以提供解决方案吗?

Django=1.11.5
Python=3.6.8

views.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 })

create.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>

3 个答案:

答案 0 :(得分:0)

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

'django.middleware.csrf.CsrfViewMiddleware',

答案 1 :(得分:0)

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

return render (request, 'create.html',{ 'form': form })

答案 2 :(得分:0)

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