Html 在Django中获取请求

Html 在Django中获取请求,html,django,Html,Django,我有一个疑问。GET请求何时发送。我的意思是,我见过很多人在第一次提交表单时使用ifrequest.method==“GET”,但在提交表单时,他们会执行“POST”请求 虽然他们在html中定义表单时明确提到方法将是“POST”,但对于请求空表单时发出的“GET”请求,他们没有这样做 django怎么知道这是GET请求 为什么要这样做 谢谢,实际上,Django是基于HTTP响应请求的。HTTP是完全文本化的。因此,Django解析每个请求,并在其头中查找关于它是什么类型的请求的信息。我可能在

我有一个疑问。GET请求何时发送。我的意思是,我见过很多人在第一次提交表单时使用if
request.method==“GET”
,但在提交表单时,他们会执行“POST”请求

虽然他们在html中定义表单时明确提到方法将是“POST”,但对于请求空表单时发出的“GET”请求,他们没有这样做

django怎么知道这是GET请求

为什么要这样做


谢谢,

实际上,Django是基于HTTP响应请求的。HTTP是完全文本化的。因此,Django解析每个请求,并在其头中查找关于它是什么类型的请求的信息。我可能在细节上弄错了,但据我所知,当服务器接收到请求时,Django会创建它的对象
request
,其中包含来自HTTP的所有数据。然后决定是否需要对
GET
POST
执行特定操作,并使用
request.method

P.S.是的,默认情况下,每个请求都是
GET

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

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

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

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

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

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

放置
修补
删除
除了流行的
GET
POST
之外,客户机还可以向Web服务器发出其他典型请求。例如
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
PUT
的一个变体,用于更新实体,而不是创建新实体。因此,
补丁
请求中缺少的字段通常与“旧”实体中的值保持相同

删除
正如名字已经暗示的那样,如果我们执行一个
deleteserver.com/blog/123/
请求,那么我们通常会删除相应的元素


某些服务器不会立即删除相应的元素。您可以将其视为计划删除对象,因此有时会删除该对象。因此,
DELETE
请求通常意味着您向服务器发出信号,最终删除实体。

我不是专家,但我认为Django“知道”这一点,因为它与Internet上的所有东西一样使用HTTP协议。如果未指定,默认方法将始终为

GET
,通常不会更改数据库(和其他持久结构)<代码>发布通常是这样。您还有其他请求方法,如
PUT
PATCH
OPTION
等。谢谢,@WillemVanOnsem。事实上,我的疑问是,当我点击一个注册页面时,它会在我面前打开一个空页面,而这是使用GET请求完成的。Django如何知道这是一个get请求,而没有明确提及任何内容。还有,它为什么提出GET请求?这是默认行为吗?谢谢@Ovidiu,我刚刚通过打印方法进行了检查。默认方法是GET,这消除了我的疑问。