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

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 参数。使用思维导图总结如下:

图片描述