python - CSRF验证失败。请求中止,Django Post 请求

标签 python django

我在 django 1.8 中更新数据库记录时遇到错误

Forbidden (403)
CSRF verification failed. Request aborted.

我的网址:

url(r'^blog/update/(?P<id>[0-9]+)/$','news.views.update')

def edit(request,id):
    blogs = Blog.objects.get(pk=id)

    return render_to_response('news/edit.html',{'blogs':blogs})

def update(request,id):
    if request.method=='POST':
        blog = Blog.objects.get(pk=id)
        blog.title = request.POST.get('title')
        blog.content = request.POST.get('content')
        blog.save()
        return HttpResponse('updated successfully!!')
    else:
        return HttpResponse('error')

新闻/edit.html

<form action="/blog/update/{{blogs.id}}/" method="POST">{%csrf_token%}
    <label>Title:</label>
    <input type="text" name="title" value="{{blogs.title}}"><br>
    <label>Content:</label>
    <textarea cols="45" rows="4" name="content">{{blogs.content}}</textarea><br>
    <input type="submit" value="submit">

</form>

最佳答案

您需要将 csrf 中间件添加到您的 settings.py 文件中:

MIDDLEWARE_CLASSES = (
...
'django.middleware.csrf.CsrfViewMiddleware',
)

还有,改变

返回 render_to_response('news/edit.html',{'blogs':blogs})

return render(request, 'news/edit.html', {'blogs': blogs})

或者

return render_to_response('news/edit.html', {'blogs': blogs}, context_instance=RequestContext(请求))

这是因为您需要为每个请求添加上下文。

Similar answer here

关于python - CSRF验证失败。请求中止,Django Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094243/

相关文章:

django - 向Django管理员用户添加表单添加更多验证

python - Python-如何正确终止threading.Timer类?

Python 子进程模块 - 意外行为

python - 由于objects.get 查询中的类型转换值而导致 Django 内部服务器错误

python - Django manage.py runserver 命令请求的资源在此服务器上找不到错误

Django 用户的 DetailVew 影响经过身份验证的用户

python - 在单独的线程中保存模型

python - 模块未找到错误: No module named 'pandas' in GitHub Actions

python - python 上的简单 XMPP 机器人

python - 如何从双端队列中弹出()很多元素?