国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python的Flask框架中@app.route的用法教程

2020-02-23 00:28:23
字體:
供稿:網(wǎng)友

在我上一篇文章,我搭了一個(gè)框架,模擬了Flask網(wǎng)站上“@app.route(‘/')”第一條例子的行為。

如果你錯(cuò)過了那篇“這不是魔法”,請(qǐng)點(diǎn)擊這里。

在這篇文章中,我們打算稍微調(diào)高點(diǎn)難度,為我們的URL加入可變參數(shù)的能力,在本文的最后,我們將支持下述代碼段所期望達(dá)到的行為。

 app = Flask(__name__) @app.route("/hello/<username>")def hello_user(username):  return "Hello {}!".format(username)

這樣下面的路徑實(shí)例(path):
/hello/ains
將會(huì)匹配上面的路徑,給我們的輸出為
Hello ains!

以正則的形式表達(dá)我們的路徑。

現(xiàn)在我們將允許我們的URL動(dòng)態(tài)變化,我們不再能夠?qū)⒂孟惹笆褂谩癅app.route()”注冊(cè)的路徑直接與路徑實(shí)例比較。

我們將用什么替代?我們需要用上正則表達(dá)式,這樣我們就可以將路徑作為一種模式進(jìn)行匹配,而不和一條固定的字符串比較了。

我不打算在本文展開討論正則表達(dá)式的細(xì)節(jié),不過如果你需要一份復(fù)習(xí)資料,可以點(diǎn)擊這個(gè)網(wǎng)站。

那么,我們的第一步是將我們的路徑轉(zhuǎn)化成正則表達(dá)式模式,這樣我們就能在輸入路徑實(shí)例時(shí)進(jìn)行匹配。我們也將使用這個(gè)正則表達(dá)式提取我們感興趣的變量。

那么,匹配路徑”/hello/”的正則表達(dá)式該長(zhǎng)啥樣呢?

嗯一個(gè)簡(jiǎn)單的正則表達(dá)式譬如“^/hello/(.+)$”將是個(gè)好的開始,讓我們一起看看它和代碼是怎么一起工作的:

 import re route_regex = re.compile(r"^/hello/(.+)$")match = route_regex.match("/hello/ains") print match.groups()

將會(huì)輸出:
('ains',)

不錯(cuò),不過,理想情況是我們想要維護(hù)我們已經(jīng)匹配上的第一組鏈接,并且從路徑“/hello/”識(shí)別出“username”。

命名捕獲組

幸運(yùn)的是,正則表達(dá)式也支持命名捕獲組,允許我們給匹配組分配一個(gè)名字,我們能在讀取我們的匹配之后找回它。

我們可以使用下述符號(hào),給出第一個(gè)例子識(shí)別“username”的捕獲組。
 

/hello/(<?P<username>.+)"

然后我們可以對(duì)我們的正則表達(dá)式使用groupdict()方法,將所有捕獲組當(dāng)作一個(gè)字典,組的名字對(duì)應(yīng)匹配上的值。

那么我們給出下述代碼:
 

route_regex = re.compile(r'^/hello/(?P<username>.+)$')match = route_regex.match("/hello/ains") print match.groupdict()

將為我們輸出以下字典:
{'username': 'ains'}

現(xiàn)在,有了我們所需要的正則表達(dá)式的格式,以及如何使用它們?nèi)テヅ漭斎氲腢RLs的知識(shí),最后剩下的是寫一個(gè)方法,將我們聲明的路徑轉(zhuǎn)換成它們等價(jià)的正則表達(dá)式模式。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿尔山市| 威宁| 渭南市| 忻州市| 泸水县| 京山县| 澜沧| 安阳市| 武隆县| 万载县| 舒兰市| 波密县| 南安市| 曲沃县| 洪雅县| 台安县| 连州市| 瑞安市| 定结县| 格尔木市| 乡宁县| 镇赉县| 沭阳县| 石台县| 平湖市| 元朗区| 塔城市| 吉木乃县| 峨山| 霍山县| 三台县| 岱山县| 垫江县| 巴彦淖尔市| 渝中区| 平果县| 贵溪市| 江山市| 嘉祥县| 安宁市| 肃南|