簡體   English   中英

Django - 403禁止。 CSRF令牌丟失或不正確

[英]Django - 403 Forbidden. CSRF token missing or incorrect

我嘗試為我的模型添加ModelForm,但每次POST嘗試都以“403 Forbidden結束.SOAPF驗證失敗。請求中止。失敗原因: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__'

這是我的views.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>

而另一個問題是:“text_name”方法名稱好嗎? 非常感謝!

在導入之后將csrf_exempt添加到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')

return redirect('/') # or some other url of your URLconf

另外,在settings.py中將'django.middleware.csrf.CsrfViewMiddleware'添加到MIDDLEWARE_CLASSES

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM