唯一的 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()
動态建構?
- 反轉通常比寫死 URL 的描述性更好。
- 你可以隻在一個地方改變 URL ,而不用到處亂找。
- URL 建立會為你處理特殊字元的轉義和 Unicode 資料,比較直覺。
- 生産的路徑總是絕對路徑,可以避免相對路徑産生副作用。
- 如果你的應用是放在 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()