URL 组成部分详解
URL 是 Uniform Resource Locator 的简写,中文名叫统一资源定位符,用于表示服务端的各种资源,例如网页。本小节讲解组成 URL 的各个部分,并给出在 Flask 中如何提取组成 URL 的各个部分。
Tips :本节课所有代码已经上传到了 Github,可以点击这里进行下载。
1. URL 组成详解
先来看一个我们经常见到的 URL 形式:
http://www.imooc.com/wiki/html5
上面这个 URL 由以下几部分组成:
scheme://host:port/path?key=value
- scheme :代表的是访问的协议,一般为 http 或者 https。例如,https://www.baidu.com 的协议是 https;
 - host :主机名、域名,例如,https://www.baidu.com 的 host 为 www.baidu.com;
 - port :端口号,http 协议默认使用 80 端口,https 协议默认使用 443 端口。通常情况下,使用默认值,不需要显式的写明端口号,例如,https://www.baidu.com 的端口是 443。某些情况下,可以显式的写明端口号,例如,http://localhost:5000 的端口号是 5000;
 - path :页面路径,例如:http://www.imooc.com/wiki/html5 的 path 是 wiki/html5;
 - key=value :查询字符串,例如:https://www.baidu.com/s?wd=python,查询字符串是 wd=python,查询字符串包括两部分:参数名和参数值,这个例子中,参数名是 wd,参数值是 python。
 
2. 在 Flask 中分析 URL 参数
服务端收到将客户端发送的数据后,封装形成一个请求对象,在 Flask 中,请求对象是一个模块变量 flask.request,request 对象包含了众多的属性。假设 URL 等于 http://localhost/query?userId=123,则与 URL 参数相关的属性如下:
| 属性 | 说明 | 
|---|---|
| url | http://localhost/query?userId=123 | 
| base_url | http://localhost/query | 
| host | localhost | 
| host_url | http://localhost/ | 
| path | /query | 
| full_path | /query?userId=123 | 
下面编写一个 Flask 程序 request.py,打印 request 中和 URL 相关的属性:
#!/usr/bin/python3
from flask import Flask
from flask import request
app = Flask(__name__)
def echo(key, value):
    print('%-10s = %s' % (key, value))
@app.route('/query')
def query():
    echo('url', request.url)
    echo('base_url', request.base_url)
    echo('host', request.host)
    echo('host_url', request.host_url)
    echo('path', request.path)
    echo('full_path', request.full_path)
    print()
    print(request.args)
    print('userId = %s' % request.args['userId'])
    return 'hello'
if __name__ == '__main__':
    app.run(port = 80)
在第 10 行,定义路径 /query 的处理函数 query();在第 11 行到第 16 行,打印 request 对象中和 URL 相关的属性;URL 中的查询参数保存在 request.args 中,在第 20 行,打印查询参数 userId 的值。
在浏览器中输入 http://localhost/query?userId=123,Flask 程序在终端输出如下:
url        = http://localhost/query?userId=123
base_url   = http://localhost/query
host       = localhost
host_url   = http://localhost/
path       = /query
full_path  = /query?userId=123
ImmutableMultiDict([('userId', '123')])
userId = 123
3. 小结
本小节通过一个具体的例子,说明组成 URL 的各个部分,以及在 Flask 程序中使用 request 对象分析 URL 参数。使用思维导图总结如下:

          本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
