Javascript &引用;禁止403-CSRF验证失败”;在Django表单中使用.submit(函数)时

Javascript &引用;禁止403-CSRF验证失败”;在Django表单中使用.submit(函数)时,javascript,python,jquery,html,django,Javascript,Python,Jquery,Html,Django,我一直在用Django开发应用程序,它有一堆表单,每个表单都在不同的页面中。在第一个视图中,我只是向用户询问一个简单的信息,即POST发送到Python并用于一些公式。我使用的代码如下所示,运行平稳: <html> <head> <title>Data</title> </head> {% load staticfiles %} <link rel="stylesheet" href="{% static 'app/co

我一直在用Django开发应用程序,它有一堆表单,每个表单都在不同的页面中。在第一个视图中,我只是向用户询问一个简单的信息,即POST发送到Python并用于一些公式。我使用的代码如下所示,运行平稳:

<html>
<head>
    <title>Data</title>
</head>

{% load staticfiles %}
<link rel="stylesheet" href="{% static 'app/content/bootstrap.css' %}">
<link rel="stylesheet" href="{% static 'app/content/custom.css' %}">

<script src="{% static 'app/scripts/jquery-1.10.2.min.js' %}"></script>
<script src="{% static 'app/scripts/jquery.validate.js' %}"></script>
<script src="{% static 'app/scripts/jquery.maskedinput.min.js' %}"></script>
<script src="{% static 'app/scripts/custom.js' %}"></script>

{% if error == 404 %}
<label>Who are you? Go away!</label>
<br>
{% endif %}
Welcome! Give me your data!
<body>
    <form action="/search/" method="post" id="myPrettyForm">
        {% csrf_token %}
        <input type="text" name="q" id="q">
        <input type="submit" value="Go!">
    </form>
</body>
<script type="text/javascript">

    $("#q").mask("00000000000");

</script>
</html>
但是,当我将此代码段添加到代码中时,每次尝试提交表单时,我都会收到一个“禁止(403)CSRF验证失败。请求中止。”错误。根据,此错误通常与没有
{%csrf_token%}
元素的表单有关。然而,我的表单已经有了这个元素

那么我在这里做错了什么?如果我使用了错误的方法来阻止我的用户在表单提交后写入输入,那么还有哪种方法可以呢
我使用?

请求。POST
是一个包含表单数据的字典。 禁用输入类将使包括csrf_令牌在内的所有输入都被禁用。
正确的方法是按id引用组件,并将组件保持为“只读”,就像您所做的那样
$(“#fieldId”).prop(“readonly”,true)

在提交之前,您可能正在更改内容。csrf是一种令牌,它在每次生成表单时生成一个随机数(以停止伪造数据)。修改表单时,可能需要进行更改。查看是否可以在提交后几秒钟进行修改。或者通过后端完成。或者如上所述,可能您不再发送令牌尝试通过jquery函数中的id
q
禁用,也可能您通过服务器端请求的
input
类禁用csrf隐藏输入。POST
@Ahtisham您是什么意思?尝试将其设置为readonly
$(“#fieldName”).attr('readonly','readonly')禁用了所有输入,包括包含CSRF令牌的隐藏输入。您应该只禁用
q
输入。
$("#myPrettyForm").submit(function () {
    $("#myPrettyForm:input").prop("disabled", true);
});