【问题标题】:How to do form validation with Django?如何使用 Django 进行表单验证?
【发布时间】:2020-04-30 10:37:11
【问题描述】:

这是一个简单的表单,出现在我的模板(comment.html)中。

<form id="my_form" action="{% url 'a' pk=id %}" method="POST">
            {% csrf_token %}
            <input id="in" required minlength="5" name="message" type="text"><br>
            <button id="click" title="add your comment" type="submit">Comment</button>
</form>

如您所见,表单内有一个输入标签,其名称为“消息”。我的问题是,当用户在他/她的计算机上获取此页面作为响应时,意味着他们可以在浏览器上简单地看到此表单代码。假设用户更改了输入标签的名称属性的值并提交了表单,那么我没有得到“消息”的值。

你能告诉我如何编写一个视图来在服务器端验证我的表单吗?这样我的网站就不会受到恶意用户和黑客的攻击?

【问题讨论】:

    标签: python django forms security


    【解决方案1】:

    假设用户更改了输入标签的名称属性的值,例如:

        <input id="in" required minlength="5" name="message" type="text"><br>
    

    到:

        <input id="in" minlength="500" name="hacked_message" type="text"><br>
    

    是的,您不会获得该特定用户的消息值,如果他们是恶意的,您为什么想要某人的消息?

    但是对于不操纵其代码的其他用户,您将获得消息的价值。

    【讨论】:

    • 那么堆栈溢出是如何工作的?当我在他们的评论部分更改 stack-overflow 站点中输入标签的名称属性时,我的评论被发布了,我想知道这件事是如何工作的。
    • 好的,您是否通过检查元素和更改此 textarae 的名称来更改评论名称?
    • 是的,你是对的。我的评论被保存了,但是如何保存。
    • 因为堆栈溢出,可能不取决于名称属性,也许他们使用 #id 代替。如果你看,在控制台(XHR 选项卡)中。每个评论都会有一个发布请求,点击参数,它会显示发送到服务器的内容。这主要是使用ajax来完成的,
    【解决方案2】:

    您可以使用 django 表单。 在这里,您可以找到有关该文档的链接: Django Forms

    为什么使用 django 表单?

    因为您有可以在视图中使用的方法,如下所示:

    form.is_valid()
    

    这里的快速示例: form validation

    在这里,您有更多关于 is_valid() 方法的信息: is_valid() doc

    【讨论】:

    • is_valid() 方法只对表单数据有效,对表单属性及其值无效。谢谢解答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2019-01-26
    • 2021-10-13
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多