12312

当用户访问一个 URL,浏览器便生成对应的 HTTP 请求,经由互联网发送到对应的 Web 服务器。Web 服务器接收请求,通过 WSGI 将 HTTP 格式的请求数据转换成我们的 Flask 程序能够使用的 Python 数据。在程序中,Flask 根据请求的 URL 执行对应的视图函数,获取返回值生成响应。响应依次经过 WSGI 转换生成 HTTP 响应,再经由 Web 服务器传递,最终被发出请求的客户端接收。浏览器渲染响应中包含的 HTML 和 CSS 代码,并执行 JavaScript 代码,最终把解析后的页面呈现在用户浏览器的窗口中。

HTTP请求

URL 是一个请求的起源。不论服务器是运行在美国纽约,还是运行在我们自己的电脑上,当我们输入指向服务器所在地址的 URL,都会向服务器发送一个 HTTP 请求。一个标准的 URL 由很多部分组成,以下面这个 URL 为例:

http://helloflask.com/hello?name=Eric
复制代码
信息说明
http://协议字符串,指定要使用的协议
helloflask.com服务器的地址(域名)
/hello?name=Eric要获取的资源路径(path)

这个URL后面的 ?name=Grey 部分是查询字符串(query string)。URL 中的查询字符串用来向指定的资源传递参数。查询字符串从问号 ? 开始,以键值对的形式写出,多个键值对之间使用 & 分隔。

请求报文

当我们在浏览器中访问这个 URL 时,随之产生的是一个发向 helloflask.com 所在服务器的请求。请求的实质是发送到服务器上的一些数据,这种浏览器与服务器之间交互的数据被称为报文(message),请求时浏览器发送的数据被称为请求报文(request message),而服务器返回的数据被称为响应报文(response message)。请求报文由请求的方法、URL、协议版本、首部字段(header)以及内容实体组成。前面的请求产生的请求报文示意如下表所示:

组成说明请求报文内容
报文首部:请求行(方法/ URL /协议)GET /hello HTTP/1.1
报文首部:各种首部字段Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: max-age=600
Content-Type: application/json
空行
报文主体name=Eric

报文由报文首部和报文主体组成,两者由空行分隔,请求报文的主体一般为空。如果 URL 中包含查询字符串,或是提交了表单,那么报文主体将会是查询字符串和表单数据。报文首部包含了请求的各种信息和设置,比如客户端的类型、是否设置缓存、语言偏好等。 以下为常见的HTTP方法:

方法说明方法说明
GET获取资源DELETE删除资源
POST传输数据HEAD获得报文首部
PUT传输文件OPTIONS询问网站支持的方法

Request对象

Flask的请求对象request,封装了从客户端发来的请求报文,我们能从它获取请求报文中的所有数据。 假设请求的URL为: http://helloflask.com/hello?name=Eric 使用request对象获取URL:

属性属性
pathhellobase_urlhelloflask.com/hello
full_pathhello?name=Ericurlhelloflask.com/hello?name=…
hosthelloflask.comurl_roothelloflask.com
host_urlhelloflask.com

request 常用的属性和方法:

在Flask中请求处理

URL 是指向网络上资源的地址。在 Flask 中,我们需要让请求的 URL 匹配对应的视图函数,视图函数返回值就是 URL 对应的资源。

路由匹配

为了便于将请求分发到对应的视图函数,程序实例中存储了一个路由表(app.url_map),其中定义了URL规则和视图函数的映射关系。当请求发来后,Flask 会根据请求报文中的URL(path部分)来尝试与这个表中的所有URL规则进行匹配,调用匹配成功的视图函数。如果没有找到匹配的URL规则,说明程序中没有处理这个URL的视图函数,Flask会自动返回404错误响应(Not Found,表示资源未找到)

设置监听的HTTP方法

在 app.route() 装饰器中使用 methods 参数传入一个包含监听的 HTTP 方法的可迭代对象。比如,下面的视图函数同时监听 GET 请求和 POST 请求:

@app.route("/hello", methods=["GET", "POST"])
def hello():
    return "hello"
复制代码

当某个请求的方法不符合要求时,请求将无法被正常处理。比如,在提交表单时通常使用 POST 方法,而如果提交的目标 URL 对应的视图函数只允许 GET 方法,这时 Flask 会自动返回一个 405 错误响应(Method Not Allowed,表示请求方法不允许)。

URL 处理

转载于:https://juejin.im/post/5cd8e41ff265da036902b685

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值