Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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表单中的CSRF令牌缺失或不正确_Python_Django_Python 2.7_Django Forms - Fatal编程技术网

Python Django表单中的CSRF令牌缺失或不正确

Python Django表单中的CSRF令牌缺失或不正确,python,django,python-2.7,django-forms,Python,Django,Python 2.7,Django Forms,我对Django表单非常陌生。我试图简单地从文本字段中获取一个值并将其存储在数据库中。我收到一份错误报告,上面说: *禁止(403) CSRF验证失败。 请求被中止。 失败原因: CSRF令牌丢失或不正确 对于POST表单,您需要确保: 您的浏览器正在接受cookies view函数使用RequestContext作为模板,而不是上下文 在模板中,每个以内部URL为目标的POST表单中都有一个{%csrf_token%}模板标记 如果未使用CsrfViewMiddleware,则必须对使用csr

我对Django表单非常陌生。我试图简单地从文本字段中获取一个值并将其存储在数据库中。我收到一份错误报告,上面说:

*禁止(403) CSRF验证失败。 请求被中止。 失败原因: CSRF令牌丢失或不正确

对于POST表单,您需要确保:

您的浏览器正在接受cookies

view函数使用RequestContext作为模板,而不是上下文

在模板中,每个以内部URL为目标的POST表单中都有一个{%csrf_token%}模板标记

如果未使用CsrfViewMiddleware,则必须对使用csrf_令牌模板标记的任何视图以及接受POST数据的视图使用csrf_protect*

我哪里做错了?

My views.py代码是:

from django.shortcuts import render
from feedback.models import Test
from mysite.forms import TestForm
from django.http import HttpResponse
from django.template import Context, loader

def test_view(request):
    form = TestForm
    t = loader.get_template('form.html')
    c = RequestContext(request,{'n':''})
    if request.method=='POST':
        form = TestForm(request.POST)
        if form.is_valid():
            in_name = request.POST.get("firstname")
            fd = Test(name = in_name)
            fd.save()
    return HttpResponse(t.render(c))
from django.db import models
from django.forms import ModelForm

class Test(models.Model):
      name = models.CharField(max_length=255)

class TestForm(ModelForm):
      class Meta:
           model = Test
           fields = ['name']
from django import forms

class TestForm(forms.Form):
      name = forms.CharField()
My models.py代码是:

from django.shortcuts import render
from feedback.models import Test
from mysite.forms import TestForm
from django.http import HttpResponse
from django.template import Context, loader

def test_view(request):
    form = TestForm
    t = loader.get_template('form.html')
    c = RequestContext(request,{'n':''})
    if request.method=='POST':
        form = TestForm(request.POST)
        if form.is_valid():
            in_name = request.POST.get("firstname")
            fd = Test(name = in_name)
            fd.save()
    return HttpResponse(t.render(c))
from django.db import models
from django.forms import ModelForm

class Test(models.Model):
      name = models.CharField(max_length=255)

class TestForm(ModelForm):
      class Meta:
           model = Test
           fields = ['name']
from django import forms

class TestForm(forms.Form):
      name = forms.CharField()
我的forms.py代码是:

from django.shortcuts import render
from feedback.models import Test
from mysite.forms import TestForm
from django.http import HttpResponse
from django.template import Context, loader

def test_view(request):
    form = TestForm
    t = loader.get_template('form.html')
    c = RequestContext(request,{'n':''})
    if request.method=='POST':
        form = TestForm(request.POST)
        if form.is_valid():
            in_name = request.POST.get("firstname")
            fd = Test(name = in_name)
            fd.save()
    return HttpResponse(t.render(c))
from django.db import models
from django.forms import ModelForm

class Test(models.Model):
      name = models.CharField(max_length=255)

class TestForm(ModelForm):
      class Meta:
           model = Test
           fields = ['name']
from django import forms

class TestForm(forms.Form):
      name = forms.CharField()
我的HTML模板是:

<!DOCTYPE html>
<html>
<head>
     <title>test form</title>
</head>

<body>

<form method = "POST">
{% csrf_token %}
First name:<br>
<input type="text" name="firstname" value = {{ n }}>
<br><br><br>
<input type="submit" value="Submit">
</form>
</body>

</html>

测试表
{%csrf_令牌%}
名字:




你用了一种错误的、非常愚蠢的方式

将表单定义从
models.py
移动到
forms.py
,因此您的
反馈/forms.py
应该是:

from django.forms import ModelForm

class TestForm(forms.ModelForm):
      class Meta:
           model = Test
           fields = ['name']
反馈/views.py
应简化为:

from django.shortcuts import render, redirect

from feedback.forms import TestForm

def test_view(request):
    if request.method == 'POST':
        form = TestForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('.')
    else:
        form = TestForm()
    return render(request, 'form.html', {'form': form})
以及模板:

<!DOCTYPE html>
<html>
<head>
     <title>test form</title>
</head>

<body>

    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit">
    </form>

</body>

</html>

测试表
{%csrf_令牌%}
{{form.as_p}}