Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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-403被禁止。CSRF令牌丢失或不正确_Python_Django_Django Forms_Csrf_Django Csrf - Fatal编程技术网

Python Django-403被禁止。CSRF令牌丢失或不正确

Python Django-403被禁止。CSRF令牌丢失或不正确,python,django,django-forms,csrf,django-csrf,Python,Django,Django Forms,Csrf,Django Csrf,我尝试为我的模型添加ModelForm,但每次POST尝试都以“403禁止。CSRF验证失败。请求中止。给出的失败原因:CSRF令牌丢失或不正确”结束。我没有render_to_response()方法,因此无法通过添加RequestContext来解决此问题。这是我的模型: from django.db import models from django.forms import ModelForm . . . class Text(models.Model): title = mod

我尝试为我的模型添加ModelForm,但每次POST尝试都以“403禁止。CSRF验证失败。请求中止。给出的失败原因:CSRF令牌丢失或不正确”结束。我没有render_to_response()方法,因此无法通过添加RequestContext来解决此问题。这是我的模型:

from django.db import models
from django.forms import ModelForm
.
.
.
class Text(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def __str__(self):
        return self.title

class TextForm(ModelForm):
    class Meta:
        model = Text
        fields = '__all__'
以下是我的观点.py:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Text, TextForm
.
.
.
def text_new(request):
    if request.method == 'POST':
        form = TextForm(request.POST)
        if form.is_valid():
            return HttpResponse('Test')
    else:
        form = TextForm()

    return render(request, 'projectname/new.html', {'form': form})
下面是new.html的一部分:

<form method="post" action="">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value="Submit" />
</form>

{%csrf_令牌%}
{{form}}

还有一个问题:“text\u name”方法名可以吗?非常感谢你

导入csrf\u export后,将其添加到your views.py,如下所示:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Text, TextForm
from django.views.decorators.csrf import csrf_exempt,csrf_protect #Add this
.
.
. 
@csrf_exempt #This skips csrf validation. Use csrf_protect to have validation
def text_new(request):
    if request.method == 'POST':
        form = TextForm(request.POST)
        if form.is_valid():
            return HttpResponse('Test')
    else:
        form = TextForm()

    return render(request, 'projectname/new.html', {'form': form})

按如下方式导入后,将csrf_emption添加到your views.py:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Text, TextForm
from django.views.decorators.csrf import csrf_exempt,csrf_protect #Add this
.
.
. 
@csrf_exempt #This skips csrf validation. Use csrf_protect to have validation
def text_new(request):
    if request.method == 'POST':
        form = TextForm(request.POST)
        if form.is_valid():
            return HttpResponse('Test')
    else:
        form = TextForm()

    return render(request, 'projectname/new.html', {'form': form})
在进口中添加

from django.shortcuts import redirect
替换

return HttpResponse('Test')

另外,将
'django.middleware.csrf.CsrfViewMiddleware'
添加到导入添加中
设置.py中的
中间件类中

from django.shortcuts import redirect
替换

return HttpResponse('Test')

另外,将
'django.middleware.csrf.csrfviewmidleware'
添加到
设置.py中的
中间件类中