我怀疑。何时发送GET请求。我的意思是,我看到很多人使用if request.method == 'GET'
,当他们第一次渲染表单时,但是当提交表单时,他们会执行“POST”请求。
虽然他们明确提到在html中定义表单时该方法将是“POST”,但他们不会对请求空表单时发出的'GET'请求执行相同的操作。
django如何知道这是一个GET请求?
而且,为什么这样做呢?
谢谢,
答案 0 :(得分:0)
实际上Django基于HTTP响应请求。 HTTP完全是textuall。所以Django会解析每个请求,并在其标题中查找有关它的请求类型的信息。我可能在细节上有误,但正如我所知,当服务器收到请求时 - Django创建了它的对象request
,其中包含来自HTTP的所有数据。然后,您决定是否需要在GET
或POST
上执行具体操作,并使用request.method
检查请求的类型。
P.S。是的,默认情况下,每个请求都是GET
。
答案 1 :(得分:0)
GET
GET
通常用于检索信息。通常,GET
函数具有无副作用(这意味着数据库中的数据未更改,文件系统中的文件未被修改等。 )。
严格地说,这并非总是如此,因为一些Web服务器会记录请求(自身),从而向数据库添加一个条目,特定用户在特定时间戳访问特定页面等等。
典型的GET
请求是幂等。这意味着一次查询或多次(两次,三次,五次,一千次)之间没有区别。
GET
查询通常用于提供静态内容,以及包含有关一个或多个条目,搜索查询等数据的页面。
POST
POST
通常附带数据(在POST
参数中),通常的想法是使用此数据完成某些操作,从而在Web服务器的持久结构中创建更改。例如,在某个表中创建新条目,或使用提供的值更新表。由于这些操作并非总是幂等,如果用户刷新浏览器中的页面,则会很危险(因为这可能会创建两个订单,而不是单个订单)用户实际上想要创建)。
因此,在Django中,POST
请求通常会导致对数据库进行一些更改,并导致redirect
。这意味着用户通常会获得一个新地址,并在该页面上执行GET
请求(并且GET
是幂等的,因此它不会构造新的订单。)
PUT
,PATCH
和DELETE
除了热门的GET
和POST
之外,客户还可以向网络服务器发出其他典型请求。例如PUT
,PATCH
和DELETE
。
PUT
PUT
是POST
请求的双胞胎。主要区别在于它命中的URI,指定要构造或更新的条目。 PUT
通常是幂等操作。
这意味着,如果我们要执行POST server.com/blog/create
来创建博客,PUT
通常会显示为PUT server.com/blog/123/
。所以我们提前指定id
。如果对象尚不存在,则Web服务器通常会构造一个。如果实体已存在,通常将为该URI构造新实体。因此,执行两次相同的PUT
操作应该没有效果。
请注意,如果发出PUT
请求,通常应指定所有字段。指定非的字段通常会使用默认值填充(如果存在此类值)。因此,我们并没有真正更新"实体:我们销毁旧实体并在实体已经存在的情况下创建一个新实体。
PATCH
PATCH
是PUT
的变体,更新实体,而非创建新实体。 PATCH
请求中缺少的字段通常与" 旧"中的值保持一致实体可以这么说。
DELETE
与已经建议的名称一样,如果我们执行DELETE server.com/blog/123/
请求,那么我们通常会删除相应的元素。
某些服务器不会立即删除相应的元素。您可以将其视为安排删除对象,因此有时会删除该对象。 DELETE
请求通常意味着您通知服务器最终删除实体。
答案 2 :(得分:0)
我不是专家,但我认为Django“知道”这一点,因为像互联网上的所有内容一样,它使用HTTP协议。 There are several HTTP methods.如果未指定,则默认方法始终为GET