URL 組成部分詳解
URL 是 Uniform Resource Locator 的簡(jiǎn)寫(xiě),中文名叫統(tǒng)一資源定位符,用于表示服務(wù)端的各種資源,例如網(wǎng)頁(yè)。本小節(jié)講解組成 URL 的各個(gè)部分,并給出在 Flask 中如何提取組成 URL 的各個(gè)部分。
Tips:本節(jié)課所有代碼已經(jīng)上傳到了 Github,可以點(diǎn)擊這里進(jìn)行下載。
1. URL 組成詳解
先來(lái)看一個(gè)我們經(jīng)常見(jiàn)到的 URL 形式:
http://yifanck.cn/wiki/html5
上面這個(gè) URL 由以下幾部分組成:
scheme://host:port/path?key=value
- scheme:代表的是訪問(wèn)的協(xié)議,一般為 http 或者 https。例如,https://www.baidu.com 的協(xié)議是 https;
- host:主機(jī)名、域名,例如,https://www.baidu.com 的 host 為 www.baidu.com;
- port:端口號(hào),http 協(xié)議默認(rèn)使用 80 端口,https 協(xié)議默認(rèn)使用 443 端口。通常情況下,使用默認(rèn)值,不需要顯式的寫(xiě)明端口號(hào),例如,https://www.baidu.com 的端口是 443。某些情況下,可以顯式的寫(xiě)明端口號(hào),例如,http://localhost:5000 的端口號(hào)是 5000;
- path:頁(yè)面路徑,例如:http://yifanck.cn/wiki/html5 的 path 是 wiki/html5;
- key=value:查詢(xún)字符串,例如:https://www.baidu.com/s?wd=python,查詢(xún)字符串是 wd=python,查詢(xún)字符串包括兩部分:參數(shù)名和參數(shù)值,這個(gè)例子中,參數(shù)名是 wd,參數(shù)值是 python。
2. 在 Flask 中分析 URL 參數(shù)
服務(wù)端收到將客戶(hù)端發(fā)送的數(shù)據(jù)后,封裝形成一個(gè)請(qǐng)求對(duì)象,在 Flask 中,請(qǐng)求對(duì)象是一個(gè)模塊變量 flask.request,request 對(duì)象包含了眾多的屬性。假設(shè) URL 等于 http://localhost/query?userId=123,則與 URL 參數(shù)相關(guān)的屬性如下:
屬性 | 說(shuō)明 |
---|---|
url | http://localhost/query?userId=123 |
base_url | http://localhost/query |
host | localhost |
host_url | http://localhost/ |
path | /query |
full_path | /query?userId=123 |
下面編寫(xiě)一個(gè) Flask 程序 request.py,打印 request 中和 URL 相關(guān)的屬性:
#!/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 的處理函數(shù) query();在第 11 行到第 16 行,打印 request 對(duì)象中和 URL 相關(guān)的屬性;URL 中的查詢(xún)參數(shù)保存在 request.args 中,在第 20 行,打印查詢(xún)參數(shù) userId 的值。
在瀏覽器中輸入 http://localhost/query?userId=123,F(xiàn)lask 程序在終端輸出如下:
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. 小結(jié)
本小節(jié)通過(guò)一個(gè)具體的例子,說(shuō)明組成 URL 的各個(gè)部分,以及在 Flask 程序中使用 request 對(duì)象分析 URL 參數(shù)。使用思維導(dǎo)圖總結(jié)如下: