我有个疑问。什么时候发送 GET 请求。我的意思是,我看到很多人request.method == 'GET'在第一次渲染表单时使用 if ,但是在提交表单时,他们会执行“POST”请求。
虽然他们在 html 中定义表单时明确提到该方法将是“POST”,但对于请求空表单时发出的“GET”请求,他们不会这样做。
django 怎么知道这是一个 GET 请求?
而且,为什么要这样做?
谢谢,
实际上 Django 是基于 HTTP 响应请求的。HTTP 是完全文本的。所以 Django 解析每个请求,并在它的头部信息中找到它是什么类型的请求。我可能在细节上弄错了,但据我所知,当服务器接收到请求时 - Django 创建了它的 object request,其中包含来自 HTTP 的所有数据。然后您决定是否需要对GETor执行特定操作,POST然后使用 . 检查请求的类型request.method。
PS是的,默认情况下每个请求都是GET.
GETAGET通常用于检索信息。通常一个GET函数没有副作用(这意味着数据库中的数据没有改变,文件系统中的文件没有被修改,等等)。
严格来说,这并不总是正确的,因为一些网络服务器(它们自己)记录请求,从而在数据库中添加一个特定用户在特定时间戳访问特定页面的条目等。
一个典型的GET请求是幂等的。这意味着查询一次或多次(两次、三次、五次、千次)没有区别。
GET因此,查询通常用于提供静态内容,以及包含有关一个或多个条目、搜索查询等数据的页面。
POSTPOST另一方面,通常附带数据(在POST参数中),通常的想法是对这些数据进行一些处理,从而在网络服务器的持久结构中产生变化。例如,在某个表中创建新条目,或使用提供的值更新表。由于这些操作并不总是幂等的,如果用户在浏览器中刷新页面可能会很危险(例如,这可能会创建两个订单,而不是用户实际想要创建的单个订单)。
因此,在 Django 中,一个POST请求通常会导致对数据库进行一些更改,redirect结果是。这意味着用户通常会获得一个新地址,并GET在该页面上执行请求(这GET是幂等的,因此不会构造新订单)。
PUT,PATCH和DELETE除了流行的GETand之外POST,客户端还可以向 Web 服务器发出其他典型请求。例如和。PUT_PATCHDELETE
PUTPUT是POST请求的孪生兄弟。主要区别在于它命中的 URI 指定了要构造或更新的条目。PUT通常是幂等操作。
这意味着,如果我们例如执行一个POST server.com/blog/create来创建一个博客,PUT通常看起来像PUT server.com/blog/123/. 所以我们id提前指定。如果对象还不存在,网络服务器通常会构建一个。如果实体已经存在,通常会为该 URI 构造一个新实体。所以两次执行相同的PUT操作,应该没有效果。
请注意,在PUT请求的情况下,通常应该指定所有字段。未指定的字段通常将填充默认值(如果存在此类值)。因此,我们并没有真正“更新”实体:我们销毁旧实体并创建一个新实体,以防该实体已经存在。
PATCHPATCHPUT是更新实体的变体,而不是创建新实体。因此,请求中缺少的字段通常与“旧PATCH”实体中的值保持相同,可以这么说。
DELETE就像名字已经暗示的那样,如果我们执行一个DELETE server.com/blog/123/请求,那么我们通常会删除相应的元素。
有些服务器不会立即删除相应的元素。您可以将其视为计划删除对象,因此有时该对象稍后会被删除。因此,该DELETE请求通常意味着您向服务器发出信号以最终删除该实体。
我不是专家,但我认为 Django “知道”这一点,因为与 Internet 上的所有事物一样,它使用 HTTP 协议。有几种 HTTP 方法。如果未指定,默认方法将始终为GET