如何在 Django 中使用表单?

推荐答案

在 Django 中使用表单可以通过以下步骤实现:

  1. 定义表单类:在 forms.py 中定义一个继承自 django.forms.Formdjango.forms.ModelForm 的表单类。

  2. 在视图中处理表单:在视图函数或类视图中处理表单的提交和验证。

    -- -------------------- ---- -------
    ---- ---------------- ------ ------- --------
    ---- ------ ------ -----------
    
    --- ----------------------
        -- -------------- -- -------
            ---- - -------------------------
            -- ----------------
                - ------
                ---- - -------------------------
                ----- - --------------------------
                ------- - ----------------------------
                - ------------
                ------ -----------------------
        -----
            ---- - -------------
        ------ --------------- --------------- -------- ------
  3. 在模板中渲染表单:在 HTML 模板中使用 Django 的模板语言渲染表单。

本题详细解读

1. 定义表单类

Django 提供了两种主要的表单类:FormModelForm

  • Form:用于创建自定义表单,适用于不需要直接与模型交互的场景。
  • ModelForm:用于创建与模型关联的表单,适用于需要直接操作数据库的场景。

在定义表单类时,可以通过 forms.CharFieldforms.EmailField 等字段类型来定义表单字段。每个字段可以指定一些参数,如 max_lengthrequiredwidget 等。

2. 在视图中处理表单

在视图中处理表单时,通常需要区分 GETPOST 请求。

  • GET 请求:通常用于显示空表单。
  • POST 请求:用于处理用户提交的表单数据。

POST 请求中,首先需要将用户提交的数据传递给表单类进行验证。如果表单数据有效,可以通过 form.cleaned_data 获取清理后的数据,并进行进一步处理(如保存到数据库或发送邮件)。如果表单数据无效,通常会将表单重新渲染并显示错误信息。

3. 在模板中渲染表单

在模板中渲染表单时,可以使用 {{ form.as_p }}{{ form.as_table }}{{ form.as_ul }} 等快捷方式来渲染表单字段。此外,还可以手动渲染每个字段,以便更灵活地控制表单的布局。

-- -------------------- ---- -------
----- --------------
    -- ---------- --
    -----
        -- ------------------- --
        -- --------- --
        -- ---------------- --
    ------
    -----
        -- -------------------- --
        -- ---------- --
        -- ----------------- --
    ------
    -----
        -- ---------------------- --
        -- ------------ --
        -- ------------------- --
    ------
    ------- -----------------------------
-------

4. CSRF 保护

Django 提供了内置的 CSRF(跨站请求伪造)保护机制。在表单中,必须包含 {% csrf_token %} 标签,以确保表单提交时携带 CSRF 令牌,防止 CSRF 攻击。

5. 表单验证

Django 的表单验证是自动进行的。在调用 form.is_valid() 时,Django 会检查表单数据的有效性,并将清理后的数据存储在 form.cleaned_data 中。如果数据无效,错误信息会存储在 form.errors 中,并可以在模板中显示。

6. 重定向与成功页面

在处理完表单数据后,通常需要将用户重定向到一个成功页面,以避免用户重复提交表单。可以使用 redirect() 函数来实现重定向。

其中 'success_url' 是 URL 名称或路径。

纠错
反馈