Django CSRF令牌丢失或解释不正确

Django CSRF令牌丢失或解释不正确,django,csrf,Django,Csrf,我只是一个初学者,从网上的一些教程开始,我不明白为什么这对我不起作用: 我的观点 from django.http import HttpResponse from django.shortcuts import get_object_or_404, render_to_response from django.template import RequestContext from django.core.context_processors import csrf class MainPa

我只是一个初学者,从网上的一些教程开始,我不明白为什么这对我不起作用:

我的观点

from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.core.context_processors import csrf


class MainPage(View):
    def get(self, request):
        return render_to_response("helloworld.html")


class TestHandler(View):
    def post(self, request):
        q = {}
        q.update(csrf(request))
        #return render_to_response('test.html', q)
        return render_to_response('test.html', {'q':q}, context_instance=RequestContext(self.request))

    def get(self, request):
        q = self.request.GET.get('q')
    return HttpResponse(q) 
还有我的URL.py

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

from django.contrib import admin
from views import MainPage, TestHandler

admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
     url(r'^hello$', MainPage.as_view(), name='home'),
     url(r'^testform/', TestHandler.as_view()),

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

>->-<html>
>->->-<head>
>->->->-<title>Hello, World!</title>
>->->-</head>
>->->-<body>
>->->->-<form method="post"  action="/testform/" >                                                                                                           
    {% csrf_token %}
>->->-<input name="q">
    <input type="submit">
</form>
>->->-</body>
>->-</html>
->->-
>->->-
>->->->-你好,世界!
>->->-
>->->-
>->->->-                                                                                                           
{%csrf_令牌%}
>->->-
>->->-
>->-
test.html

>-<body>
>-Hello {{q}}
>-</body>
>-
>-你好{{q}
>-

这是在django 1.6上运行的,我读了这篇文章的大部分内容,仍然无法理解。

不幸的是,您粘贴的内容有点混乱,您使用的是基于类的视图,但您将它们与基于函数的视图混合在一起(还有一半的声明丢失)

在settings.py中启用CSRF Middlware

MIDDLEWARE_CLASSES = (
    ...
    'django.middleware.csrf.CsrfViewMiddleware',
    ...
)
将视图修复为正确的基于类的视图,粘贴的内容完全错误:

from django.views.generic import CreateView, TemplateView
from django.core.urlresolvers import reverse_lazy


# Create the form in your forms.py
from .forms import (
    MyTestForm,
)

class MainPage(TemplateView):
    template_name = "test.html"

class TestHandler(CreateView):
    form_class = MyTestForm
    template_name = "helloworld.html"
    success_url = reverse_lazy('home')
创建表单模板:

<html>
    <head>
        <title>Hello, World!</title>
    </head>
    <body>
        <form method="post"  action="/testform/">
            {% csrf_token %}
            <input name="q">
            <input type="submit">
        </form>
    </body>
</html>

你好,世界!
{%csrf_令牌%}