1. 程式人生 > >flask第十篇——url_for【3】

flask第十篇——url_for【3】

Coding spa deb 什麽 onf media bsp rgs 錯誤

繼續url_for的知識點

# coding: utf-8

from flask import Flask, url_for
import flask app = Flask(__name__) # type: Flask
app.debug = True

# 根目錄
@app.route(‘/‘)
def hello_world(): return ‘Hello World!‘

@app.route(‘/login/<page_id>/‘)
def login(page_id): return u‘登錄頁面‘

@app.route(‘/list/‘)
def mylist(): return url_for(‘login‘, page_id=1, title_id=2)

if __name__ == ‘__main__‘: app.run()

現在我們在mylist函數中的url_for多傳一個參數,這時候會返回什麽結果呢,執行代碼可以看到:

技術分享圖片

看上面的代碼,如果現在我想在login函數中獲取title_id,該怎麽獲取呢?我們之前已經寫過的,我們可以通過修改login函數:

@app.route(‘/login/<page_id>/‘)
def login(page_id): title_id = flask.request.args.get(‘title_id‘)
return title_id

這樣,在頁面訪問127.0.0.1:5000/login/2/頁面顯示的就是title_id。

現在我們來說url_for的另一個優點,就是它會自動對你傳遞的內容進行編碼:

# coding: utf-8

from flask import Flask, url_for
import flask app = Flask(__name__) # type: Flask
app.debug = True

# 根目錄
@app.route(‘/‘)
def hello_world(): return ‘Hello World!‘

@app.route(‘/login/<page_id>/‘)
def login(page_id): return u‘登錄頁面‘

@app.route(‘/list/‘)
def mylist(): return url_for(‘login‘, page_id=1, title_id=‘/‘)

if __name__ == ‘__main__‘: app.run()

上面代碼中,我們在mylist函數中給login函數傳了一個`title_id=‘/‘`,然後頁面中看到:

技術分享圖片

頁面對/進行了ASCII編碼,/變成了%2F。這種機制就避免了url的混亂,比如我們地址是127.0.0.1:5000/login/,後面查詢字符串中含有/,那地址就成了類似127.0.0.1:5000/login//這種url形式明顯是錯誤的,但是如果我們用url_for,那麽地址 就會自動轉換為127.0.0.1:5000/login/%2F,如此一來就避免了url的錯亂。

大家千萬不要忽視函數上面的@app.route(),找了好幾個代碼顯示樣式,就是怕大家忽視這個問題。

請關註微信公眾號:自動化測試實戰,查看更好的排版及圖片

flask第十篇——url_for【3】