【发布时间】:2019-06-20 12:39:04
【问题描述】:
我收到了
禁止(CSRF 令牌丢失或不正确)
我尝试了在 Stack Overflow 上找到的不同解决方案,但我无法修复它!
我曾尝试使用render_to_response,但当我这样做时,我收到此错误:
这通常是由于没有使用 RequestContext 造成的。 "模板中使用了 {% csrf_token %},但上下文 "
这是forms.py
from django import forms
class AskForm(forms.Form):
name = forms.CharField(
max_length=30,
widget=forms.TextInput(
attrs={
'placeholder': 'Write your name here',
'class': 'ask-page-input',
'label': 'Student Name',
}
))
email = forms.EmailField(
max_length=254,
widget=forms.EmailInput(
attrs={
'placeholder': 'Write your Email here',
'class': 'ask-page-input',
'label': 'Email',
}
))
subject = forms.CharField(
max_length=50,
widget=forms.TextInput(
attrs={
'placeholder': 'Write your Question or Related Subject here',
'class': 'ask-page-input',
'label': 'Subject',
}
))
message = forms.CharField(
max_length=2000,
widget=forms.Textarea(
attrs={
'placeholder': 'Write your message here',
'class': 'ask-page-input',
'label': 'Message',
}
))
source = forms.CharField( # A hidden input for internal use
max_length=50, # tell from which page the user sent the message
widget=forms.HiddenInput()
)
def clean(self):
cleaned_data = super(ContactFrom, self).clean()
name = cleaned_data.get('name')
email = cleaned_data.get('email')
subject = cleaned_data.get('subject')
message = cleaned_data.get('message')
if not name and not email and not subject and not message:
raise forms.ValidationError('You have to write something!')
这是views.py
from django.shortcuts import render, redirect, render_to_response
from forms import AskForm
def askpage_form(request):
if request.method == 'POST':
form = AskForm(request.POST)
if form.is_valid():
pass # does nothing, just trigger the validation
else:
form = AskForm()
return render(request, "ask.html", {'form': form, })
这是html文件
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Physics Quizzes Ask</title>
</head>
<body>
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit" name="button">Submit</button>
</form>
</body>
</html>
【问题讨论】:
-
您是否尝试清除缓存?
-
是的,我试过这样做,但没有成功! @ShafikurRahman
-
settings.py 中 MIDDLEWARE_CLASSES 中的 'django.middleware.csrf.CsrfViewMiddleware' 是否可用
-
是的,它可用。
标签: django django-forms django-templates django-views