我正在学习Django,作为教程的一部分,我试图通过表单传递一些数据。GET很好,但是POST给了我一个禁止的403。我在谷歌上搜索并应用了许多技巧,但没有任何帮助。
下面是我的代码:
查看
@csrf_protect
def counter(request):
template = loader.get_template("counter.html")
ss = request.POST["cnt"]
context = {
"words" : len(ss.split(" "))
}
return HttpResponse(template.render(context, request))
形式
<form method="post" action="counter">
{% csrf_token %}
<textarea name="cnt" rows="10" cols="50"></textarea><br>
<input type="submit">
</form>
403错误是:
禁止访问(403)请求已中止。帮助失败原因:缺少CSRF令牌。
但在删除cookie后(我读到这可能是cookie的问题),它变成了:
禁止访问(403)请求已中止。您看到此消息是因为此网站在提交表单时需要CSRF Cookie。出于安全原因,需要使用此Cookie,以确保您的浏览器不被第三方劫持。如果您已将浏览器配置为禁用Cookie,请重新启用它们,至少对于本网站或“同源”请求。
这个问题只有在我在设置中注解掉'django.middleware.csrf.CsrfViewMiddleware'并从html表单中删除{% csrf_token %}时才能解决。
2条答案
按热度按时间5rgfhyps1#
根据您提供的内容,您希望在分割文本区域中输入的值后获得长度。为此,请尝试使用request.POST.get('cnt ')。这将为您带来价值。
xv8emn3q2#
中间件已经通过使用
@csrf_protect
保护了这一点,您第二次检查它,因此出现错误:在模板中,我还建议让Django确定(绝对)URL,所以: