CSRF验证失败,“ CSRF令牌丢失或不正确”

时间:2020-06-28 15:08:36

标签: django django-forms

这个问题已经被问过很多遍了,我已经阅读了所有这些答案,但是没有一个对我有用,所以我想再试一次。

当我尝试使用用户名和密码提交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,因为此应用程序将直接投入生产。

1 个答案:

答案 0 :(得分:0)

我可以使用它,但是不确定为什么可以解决它。谁能澄清? 我改变了:

return HttpResponse(template.render(context))

收件人:

return HttpResponse(template.render(context, request=request))

我以为请求是由render()自动执行的?因此,我不确定为什么必须添加request=request