天天看點

#yyds幹貨盤點#Flask重定向行為

唯一的 URL / 重定向行為

以下兩條規則的不同之處在于是否使用尾部的斜杠。:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'      

projects

 的 URL 是中規中矩的,尾部有一個斜杠,看起來就如同一個檔案夾。 通路一個沒有斜杠結尾的 URL 時 Flask 會自動進行重定向,幫你在尾部加上一個斜杠。

about

 的 URL 沒有尾部斜杠,是以其行為表現與一個檔案類似。如果通路這個 URL 時添加了尾部斜杠就會得到一個 404 錯誤。這樣可以保持 URL 唯一,并幫助 搜尋引擎避免重複索引同一頁面。

URL 建構

​url_for()​

 函數用于建構指定函數的 URL。它把函數名稱作為第一個 參數。它可以接受任意個關鍵字參數,每個關鍵字參數對應 URL 中的變量。未知變量 将添加到 URL 中作為查詢參數。

為什麼不在把 URL 寫死在模闆中,而要使用反轉函數 ​

​url_for()​

 動态建構?

  1. 反轉通常比寫死 URL 的描述性更好。
  2. 你可以隻在一個地方改變 URL ,而不用到處亂找。
  3. URL 建立會為你處理特殊字元的轉義和 Unicode 資料,比較直覺。
  4. 生産的路徑總是絕對路徑,可以避免相對路徑産生副作用。
  5. 如果你的應用是放在 URL 根路徑之外的地方(如在 

    /myapplication

     中,不在 

    /

     中), url_for() 會為你妥善處理。
from flask import Flask, escape, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return 'index'

@app.route('/login')
def login():
    return 'login'

@app.route('/user/<username>')
def profile(username):
    return '{}\'s profile'.format(escape(username))

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))
    print(url_for('login', next='/'))
    print(url_for('profile', username='John Doe'))      
/
/login
/login?next=/
/user/John%20Doe      

HTTP 方法

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()