•一個URL要與執行函數進行對映,使用的是@app.route
裝飾器。
•@app.route
裝飾器中,可以指定URL的規則來進行更加詳細的對映,如果現在要對映一個文章篇數的URL,文章篇數的URL是/article/number/
,number有可能為1、2、3…,那麼可以通過以下方式來對映:
@app.route('/article/<number>')
def article(number):
return '這是我的第{}篇文章'.format(number)
•上述其中,尖括號是固定語法不可改變,表示路由地址中傳入的引數,預設的資料型別是字串。如果需要限制引數型別,則要寫成限制型別:變數名
,限制型別包括以下幾種:
string | 預設的資料型別,接受任何沒有斜槓 / 的字串。 |
---|---|
int | 整型 |
float | 浮點型 |
path | 和string作用類似,但是可以傳遞斜槓 / |
uuid | uuid型別的字串 |
any | 可以指定多條路路徑 |
from flask import Flask
app = Flask(__name__)
# 裝飾器,將當前路由對映到指定函數
@app.route('/ycx')
def first_flask():
return '但行好事,莫問前程'
if __name__ == '__main__':
app.run(debug=True)
•我們在瀏覽器中輸入http://127.0.0.1:5000/ycx即可存取到以下頁面:
•同時我們還可以動態傳入引數,並指定引數型別
from flask import Flask
app = Flask(__name__)
# 裝飾器,將當前路由對映到指定函數
@app.route('/ycx')
def first_flask():
return '但行好事,莫問前程'
@app.route('/article/<int:number>') #規定資料型別為int
def article(number):
return '這是我的第{}篇文章'.format(number)
if __name__ == '__main__':
app.run(debug=True)
•一般情況下引數中不能包含 /, 如果要包含 /,必須將資料型別限制為path型別,除此區別之外,path型別與string型別使用基本一樣
from flask import Flask
app = Flask(__name__)
# 裝飾器,將當前路由對映到指定函數
@app.route('/ycx')
def first_flask():
return '但行好事,莫問前程'
@app.route('/article/<int:number>')
def article(number):
return '這是我的第{}篇文章'.format(number)
@app.route('/comment/<path:aid>') #path型別可用string 和 /
def comment_list(aid):
return '這是我的第{}個評論'.format(aid)
if __name__ == '__main__':
app.run(debug=True)
comment_list(aid)函數
•兩個路由存取同一個函數可以用any型別來限制
from flask import Flask
app = Flask(__name__)
# 裝飾器,將當前路由對映到指定函數
@app.route('/ycx')
def first_flask():
return '但行好事,莫問前程'
@app.route('/article/<int:number>')
def article(number):
return '這是我的第{}篇文章'.format(number)
@app.route('/comment/<path:aid>')
def comment_list(aid):
return '這是我的第{}個評論'.format(aid)
@app.route('/<any(list,dict):url_path>/')
def message(url_path):
if url_path == 'list':
return '當前路由是list'
else:
return '當前路由是dict'
if __name__ == '__main__':
app.run(debug=True)
/<any(list,dict):url_path>/
•如果不想通過指定子路徑來傳遞引數,也可以通過 ?=的形式來傳遞引數,例如:/article?id=xxx
這種情況下,可以通過request.args.get(‘id’)
來獲取id的值
•如果是post方法,則需要通過request.form.get(‘id’)
來進行獲取id的值。
•如果需要在flask中使用上述方法,需先匯入request庫 from flask import request
from flask import Flask, request
app = Flask(__name__)
# 裝飾器,將當前路由對映到指定函數
@app.route('/ycx')
def first_flask():
return '但行好事,莫問前程'
@app.route('/article/<int:number>')
def article(number):
return '這是我的第{}篇文章'.format(number)
@app.route('/comment/<path:aid>')
def comment_list(aid):
return '這是我的第{}個評論'.format(aid)
@app.route('/<any(list,dict):url_path>/')
def message(url_path):
if url_path == 'list':
return '當前路由是list'
else:
return '當前路由是dict'
@app.route('/cx')
def search():
return request.args.get('name')
if __name__ == '__main__':
app.run(debug=True)
request.args.get()
中傳入的引數未在URL中傳入,會出現報錯,因為URL未傳入name引數,所以request.args.get()
方法的值為空,即檢視函數search()返回的值為空,不能渲染,所以會出現報錯