【问题标题】:Trouble understanding Django Forms无法理解 Django 表单
【发布时间】:2015-06-28 15:13:29
【问题描述】:

我目前正在从“如何使用 django 探戈”网站学习 django,但我无法理解处理表单的章节。 如果有人能帮助我,感激不尽。

http://www.tangowithdjango.com/book17/chapters/forms.html

第一步是创建一个映射到 models.py 的表单页面。我似乎明白这部分。我也明白我们创造 处理从这些表格中获取的数据的视图。我无法理解视图页面中的以下代码。

from rango.forms import CategoryForm

def add_category(request):
    # A HTTP POST?
    if request.method == 'POST':
        form = CategoryForm(request.POST)
    else:
        # If the request was not a POST, display the form to enter details.
        form = CategoryForm()
  1. 在用户实际在表单中输入任何数据之前,urlmapper 如何知道请求方法是 POST 还是 GET? 类似地,表单什么时候有 get 方法?

  2. form = CategoryForm(request.POST) - 有人可以向我解释一下吗? CategoryForm 看起来是一个已经从另一个类继承的类 request.POST 参数传达了什么?

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    1) urlmapper 默认不关心 GET 或 POST 请求方法。它将任何请求路由到给定的视图函数。

    通常,您的表单 html 代码如下所示:

    <form method="post" action="some_url">
    ...
    </form>
    

    因此,当您提交表单时,数据将通过指定的方法发送到some_url,在本例中为post

    您可能想了解何时使用 GET 或 POST,通常使用 POST 传输表单。

    2) form = CategoryForm(request.POST) 会将请求的 POST 字典中提供的值绑定到表单。你可能会说,它预先填充了这个。这样,就可以进一步处理表单(例如通过调用form.is_valid() 来验证它)。

    也许您应该通过阅读一些official documentation 来进一步研究 Django 表单和模型表单。

    【讨论】:

    • 谢谢.. 我相信我犯了一个错误,即查看整个代码并期望它以“直接”方式流动,而不是基于给定条件的流动,如果这样的话任何意义。但现在它变得更加清晰了:)
    • @Kunkka 不客气!想想后端的视图函数入口点。正如 Daniel Roseman 所述:该函数必须提供初始(空的或预填充的)表单,然后还必须处理提交的表单。
    【解决方案2】:

    为什么您认为 URL 映射器知道它是否是获取的帖子?它没有,它不在乎。

    您缺少的是这个视图有两个职责:显示初始表单(在 GET 上)和处理提交的表单(在 POST 上)。

    您的第二个问题表明您不熟悉基本的 Python 语法。 request.POST 是表单实例初始化的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多