1
我對Django表單非常陌生。我試圖簡單地從文本字段獲取值並將其存儲在數據庫中。我收到一條錯誤報告:CSRF令牌在Django表格中丟失或不正確
*禁止(403) CSRF驗證失敗。 請求已中止。 失敗的原因: CSRF令牌丟失或不正確。
對於POST表單,您需要確保:
您的瀏覽器是否接受Cookie。
視圖函數使用RequestContext作爲模板而不是上下文。
在該模板中,每個POST表單內都有一個以%ssrf_token%爲模板的標記,用於定位內部URL。
如果你不使用CsrfViewMiddleware,則必須在使用該csrf_token模板標記任何視圖使用csrf_protect,以及那些接受POST數據。*
我要去哪裏錯了?
我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))
我的models.py代碼:
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']
我forms.py代碼:
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>