我正在通过创建博客网站来学习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>
答案 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验证失败。但是不知道它是如何工作的?有人解释一下怎么回事吗?