在Django中获取请求

时间:2018-06-18 16:55:09

标签: html django

我怀疑。何时发送GET请求。我的意思是,我看到很多人使用if request.method == 'GET',当他们第一次渲染表单时,但是当提交表单时,他们会执行“POST”请求。

虽然他们明确提到在html中定义表单时该方法将是“POST”,但他们不会对请求空表单时发出的'GET'请求执行相同的操作。

django如何知道这是一个GET请求?

而且,为什么这样做呢?

谢谢,

3 个答案:

答案 0 :(得分:0)

实际上Django基于HTTP响应请求。 HTTP完全是textuall。所以Django会解析每个请求,并在其标题中查找有关它的请求类型的信息。我可能在细节上有误,但正如我所知,当服务器收到请求时 - Django创建了它的对象request,其中包含来自HTTP的所有数据。然后,您决定是否需要在GETPOST上执行具体操作,并使用request.method检查请求的类型。
P.S。是的,默认情况下,每个请求都是GET

答案 1 :(得分:0)

GET

GET通常用于检索信息。通常,GET函数具有副作用(这意味着数据库中的数据更改,文件系统中的文件未被修改等。 )。

严格地说,这并非总是如此,因为一些Web服务器会记录请求(自身),从而向数据库添加一个条目,特定用户在特定时间戳访问特定页面等等。

典型的GET请求是幂等。这意味着一次查询或多次(两次,三次,五次,一千次)之间没有区别。

因此,

GET查询通常用于提供静态内容,以及包含有关一个或多个条目,搜索查询等数据的页面。

POST

另一方面,

POST通常附带数据(在POST参数中),通常的想法是使用此数据完成某些操作,从而在Web服务器的持久结构中创建更改。例如,在某个表中创建新条目,或使用提供的值更新表。由于这些操作并非总是幂等,如果用户刷新浏览器中的页面,则会很危险(因为这可能会创建两个订单,而不是单个订单)用户实际上想要创建)。

因此,在Django中,POST请求通常会导致对数据库进行一些更改,并导致redirect。这意味着用户通常会获得一个新地址,并在该页面上执行GET请求(并且GET是幂等的,因此它不会构造新的订单。)

PUTPATCHDELETE

除了热门的GETPOST之外,客户还可以向网络服务器发出其他典型请求。例如PUTPATCHDELETE

PUT

PUTPOST请求的双胞胎。主要区别在于它命中的URI,指定要构造或更新的条目。 PUT通常是幂等操作。

这意味着,如果我们要执行POST server.com/blog/create来创建博客,PUT通常会显示为PUT server.com/blog/123/。所以我们提前指定id。如果对象尚不存在,则Web服务器通常会构造一个。如果实体已存在,通常将为该URI构造新实体。因此,执行两次相同的PUT操作应该没有效果。

请注意,如果发出PUT请求,通常应指定所有字段。指定的字段通常会使用默认值填充(如果存在此类值)。因此,我们并没有真正更新"实体:我们销毁旧实体并在实体已经存在的情况下创建一个新实体。

PATCH

PATCHPUT的变体,更新实体,而非创建新实体。 PATCH请求中缺少的字段通常与" "中的值保持一致实体可以这么说。

DELETE

与已经建议的名称一样,如果我们执行DELETE server.com/blog/123/请求,那么我们通常会删除相应的元素。

某些服务器会立即删除相应的元素。您可以将其视为安排删除对象,因此有时会删除该对象。 DELETE请求通常意味着您通知服务器最终删除实体。

答案 2 :(得分:0)

我不是专家,但我认为Django“知道”这一点,因为像互联网上的所有内容一样,它使用HTTP协议。 There are several HTTP methods.如果未指定,则默认方法始终为GET