基于函数的视图在 Django 1.11.5 中的 CSRF 验证失败
function based view failed on CSRF verification in Django 1.11.5
我正在通过创建博客站点来学习 Django。但是当尝试使用基于函数的视图创建 post 时,CSRF 验证失败。
使用 csrf_exempt
装饰器,我可以毫无错误地创建 post。但是为了安全需要使用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>
在 settings.py
的 MIDDLEWARE
部分添加:
'django.middleware.csrf.CsrfViewMiddleware',
您不应该使用 render_to_response
。使用 render
运行上下文处理器,例如插入 csrf 令牌的处理器。
return render (request, 'create.html',{ 'form': form })
通过将 render_to_response 替换为渲染清除此 CSRF 验证失败。但不知道它是如何工作的?有人解释一下这是怎么回事吗?
我正在通过创建博客站点来学习 Django。但是当尝试使用基于函数的视图创建 post 时,CSRF 验证失败。
使用 csrf_exempt
装饰器,我可以毫无错误地创建 post。但是为了安全需要使用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>
在 settings.py
的 MIDDLEWARE
部分添加:
'django.middleware.csrf.CsrfViewMiddleware',
您不应该使用 render_to_response
。使用 render
运行上下文处理器,例如插入 csrf 令牌的处理器。
return render (request, 'create.html',{ 'form': form })
通过将 render_to_response 替换为渲染清除此 CSRF 验证失败。但不知道它是如何工作的?有人解释一下这是怎么回事吗?