flask第十篇——url_for【3】
阿新 • • 發佈:2018-03-15
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】