难以理解Django Forms

时间:2015-06-28 15:13:29

标签: python django forms

我目前正在从'如何与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参数传达了什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

因此,当您提交表单时,数据将使用指定的方法发送到 some_url ,在本例中为 post 。< / p>

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

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

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

答案 1 :(得分:0)

为什么你认为URL映射器知道它是否是一个帖子?它没有,也没关心。

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

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