黃色標注部分重點注意
1. URL與函式的映射
?一個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()回傳的值為空,不能渲染,所以會出現報錯
網頁顯示:

有問題可以在評論指正,歡迎討論,謝謝大家!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/179106.html
標籤:其他
下一篇:100個numpy問題8-100
