Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django basic博客CSRF验证失败。请求中止_Python_Django - Fatal编程技术网

Python django basic博客CSRF验证失败。请求中止

Python django basic博客CSRF验证失败。请求中止,python,django,Python,Django,我正在努力学习django。我正在写一个基本的博客,现在我想能够添加帖子。我想通过post请求来实现这一点,并调用一个方法将表单中的内容保存到我的db中。现在我在csrf方面遇到了麻烦。我知道有很多关于这个的帖子,但是我已经浏览了其中的很多,并没有能够解决我的问题。我尝试添加{%csrf\u token%},但没有成功。我尝试清除浏览器缓存/cookies。我将csrf添加到我的中间件中。如果有人能帮我解决这个问题,我会很感激的。我还看到了{%url some something%}的符号,但我

我正在努力学习django。我正在写一个基本的博客,现在我想能够添加帖子。我想通过post请求来实现这一点,并调用一个方法将表单中的内容保存到我的db中。现在我在csrf方面遇到了麻烦。我知道有很多关于这个的帖子,但是我已经浏览了其中的很多,并没有能够解决我的问题。我尝试添加
{%csrf\u token%}
,但没有成功。我尝试清除浏览器缓存/cookies。我将csrf添加到我的中间件中。如果有人能帮我解决这个问题,我会很感激的。我还看到了
{%url some something%}
的符号,但我还没有弄清楚它的作用。我真的很感激任何帮助

models.py

from django.db import models

class Post(models.Model):
    text = models.TextField(max_length=250)
    time = models.DateTimeField(auto_now_add=True)
    def __unicode__(self):
        return self.text
views.py

from django.http import Http404, HttpResponse
from django.shortcuts import render_to_response, redirect
from blog.models import Post

def home(request):
    try:
        p = Post.objects.all()
    except Post.DoesNotExist:
        raise Http404
    return render_to_response('index.html',
        {'post':p})

def post(request, uID):
    try:
        p = Post.objects.get(pk=uID)
    except:
        raise Http404
    return render_to_response('post.html',
        {'post':p})

def delete(request, uID):
    try:
        p = Post.objects.get(pk=uID).delete()
    except:
        raise Http404
    return render_to_response('delete.html',
        {'post':p})

def new(request):
    return render_to_response('new.html')

def add(request):
    if request.method == 'POST':
        c = {}
        c.update(csrf(request))
        p = Post(text=request.text)
        p.save()
        return render_to_response("index.html", c)
    else:
        raise Http404
url.py

from django.conf.urls import patterns, include, url


from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'blog.views.home', name='home'),
    url(r'^(?P<uID>\d+)/$', 'blog.views.post', name='Post Id'),
    url(r'^(?P<uID>\d+)/delete/$', 'blog.views.delete', name='del'),
    url(r'^new/$', 'blog.views.new'),
    url(r'^created/$', 'blog.views.added'),
    # url(r'^myApp/', include('myApp.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),


    url(r'^admin/', include(admin.site.urls)),
)

您需要将csrf验证添加到视图以及html中,以便

def new(request):
    context = {}
    context.update(csrf(request))
    return render_to_response("new.html", context)

您需要将csrf验证添加到视图以及html中,以便

def new(request):
    context = {}
    context.update(csrf(request))
    return render_to_response("new.html", context)

尝试将
django.middleware.csrf.CsrfResponseMiddleware
添加到
settings.py中的
middleware\u类
,django的403页描述了csrf检查失败的原因。如果您在未指定Referer头的情况下通过https发布,即使正确指定了CSRF令牌,也会失败。请添加有关错误的详细信息。请尝试将
django.middleware.csrf.CsrfResponseMiddleware
添加到
settings.py
django的403页中的
middleware\u CLASSES
,其中描述了csrf检查失败的原因。如果您在未指定Referer头的情况下通过https发布,即使正确指定了CSRF令牌,也会失败。请添加有关错误的详细信息。我以为我已经尝试过了,但我忘记在render\u to\u响应调用中添加上下文。谢谢我以为我已经试过了,但我忘了在render_to_响应调用中添加上下文。谢谢
def new(request):
    context = {}
    context.update(csrf(request))
    return render_to_response("new.html", context)