URL
- Uniform Resource Locator 的简写,中文名叫统一资源定位符
- 用于表示服务端的各种资源,例如网页
- 下面将讲解 Flask 中如何提取组成 URL 的各个部分
URL 组成详解
一个常见的 url
https://www.cnblogs.com/poloyy/
由以下几部分组成
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:页面路径,例如:https://www.cnblogs.com/poloyy/的 path 是 poloyy/;
- key=value:查询字符串,例如:https://www.baidu.com/s?wd=python,查询字符串是 wd=python,查询字符串包括两部分:参数名和参数值,这个例子中,参数名是 wd,参数值是 python
在 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 |
实际栗子
#!/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)
浏览器访问
http://127.0.0.1:5000/query?userId=123
控制台输出结果
url = http://127.0.0.1:5000/query?userId=123 base_url = http://127.0.0.1:5000/query host = 127.0.0.1:5000 host_url = http://127.0.0.1:5000/ path = /query full_path = /query?userId=123 ImmutableMultiDict([('userId', '123')]) userId = 123
总结
request 还有很多其他属性,后面会陆续讲到