这个问题已经被问过很多遍了,我已经阅读了所有这些答案,但是没有一个对我有用,所以我想再试一次。
当我尝试使用用户名和密码提交Django表单时,出现以下错误消息: “ CSRF令牌丢失或不正确”。
CSRF令牌不丢失。 这是我将其包含在.html模板中的表单中的位置:
在 index.html中:
<form name="loginform" action="/notes/index/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit"/>
{% for field, errors in form.errors.items %}
{{ errors }}
{% endfor %}
</form>
在 views.py:
class LoginForm(forms.Form):
username = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput())
def index(request):
if request.method == 'POST':
print("Received POST")
form = LoginForm(request.POST)
if form.is_valid():
print("FORM is Valid")
else:
print("FORM is NOT VALID")
template = loader.get_template('index.html')
context = {
'username': 'Benny',
'form': LoginForm(),
}
return HttpResponse(template.render(context))
我在设置中也有CSRF中间件。我正尝试避免使用@csrf_exempt,因为此应用程序将直接投入生产。
答案 0 :(得分:0)
我可以使用它,但是不确定为什么可以解决它。谁能澄清? 我改变了:
return HttpResponse(template.render(context))
收件人:
return HttpResponse(template.render(context, request=request))
我以为请求是由render()自动执行的?因此,我不确定为什么必须添加request=request
。