開頭必須分享一個我的志玲姐姐,太可了!點擊此處

flask視圖函式與路由的關系
- 一、視圖函式與路由 實戰重點
- 1.1 一個視圖函式可以系結多個URL地址
- 1.2 視圖裝飾器應該放到最外層
- 1.3所實作的裝飾器要回傳視圖函式的回傳值
- 二、動態路由
- 1. 用url匹配
- 2. 通過傳參
- 三、路由重定向
- 四、路由注冊機制
- 4.1 集中注冊機制
- 4.2 裝飾器注冊
- 五、app.route()可配置的引數
- 六、視圖函式的分離(非常重要)
https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)
一、視圖函式與路由 實戰重點
1.1 一個視圖函式可以系結多個URL地址

1.2 視圖裝飾器應該放到最外層
引入裝飾器,裝飾器要放到@app.route()里面

1.3所實作的裝飾器要回傳視圖函式的回傳值
比如說我這里直接回傳“hello”,此時“hello”就會回傳到前端去,就意味著視圖函式的回傳值就沒有用了

運行結果:

裝飾器正確回傳視圖函式的回傳值:

運行結果:

二、動態路由
1. 用url匹配
將id動態地放到url里面 就可以查到id對應的case 例如http://127.0.0.1:5000/test/hello
from flask import Flask
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
#定義路由 <尖括號里面的可以改變> 將id動態地放到url里面 就可以查到id對應的case 例如http://127.0.0.1:5000/test/hello
@app.route('/test/<id>')
def get_case(id):
return f'{id}' #字串格式化
if __name__ == '__main__':
app.run(debug=True)
運行結果

2. 通過傳參
from flask import Flask, request
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
#定義路由
@app.route('/test')
def get_case():
id = request.args.get("id")
return f'{id}' #字串格式化
if __name__ == '__main__':
app.run(debug=True)
運行結果

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)
三、路由重定向
/test/和/test是兩個不同的url
from flask import Flask
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
@app.route('/test2/')
def get_case():
return "有斜杠,輸入url的時候加不加那個/都可以"
@app.route('/test1')
def get_case_1():
return "沒有斜杠,輸入的時候不可以有/"
if __name__ == '__main__':
app.run(debug=True)
至于加不加,演示一下就OK了
四、路由注冊機制
路由:url與視圖函式的系結關系 每個系結關系都會單獨命一個名字(這個東西就叫做端點)
app.url_map() 專門用來存盤路由關系
from flask import Flask
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
print(app.url_map)
@app.route('/test')
def get_case():
return "有斜杠,輸入url的時候加不加那個/都可以"
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)

如果專案比較大的話,比如有200個Url,就最好用集中注冊機制,如果Url沒幾個,就用裝飾器注冊(@app.route())
4.1 集中注冊機制
app.add_url_rule('/a',view_func=get_case)
app.add_url_rule('/b',view_func=get_case_b)
4.2 裝飾器注冊
@app.route()
五、app.route()可配置的引數
- endpoint進行URL構建的時候會有用,endpoint的作用是url和view中間設定的一個橋梁
- methds,默認有get,head,option
from flask import Flask
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
print(app.url_map)
@app.route('/test',methods=['POST'],endpoint='tests')
def get_case():
return "有斜杠,輸入url的時候加不加那個/都可以"
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
運行效果:

- 重定向
方法一:@app.route(redirect_to=’/’) 不會去執行視圖函式
@app.route(redirect_to='/')
from flask import Flask
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
@app.route('/')
def index():
return 'this is index'
print(app.url_map)
@app.route('/test',methods=['POST'],endpoint='tests',redirect_to='/')
def get_case():
print("判斷一下這個函式有沒有運行")
return "有斜杠,輸入url的時候加不加那個/都可以"
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
方法二:視圖函式里面redirect()
from flask import Flask, redirect
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
# @app.route('/')
# def index():
# return 'this is index'
#
# print(app.url_map)
@app.route('/test',methods=['POST'],endpoint='tests')
def get_case():
print("判斷一下這個函式有沒有運行")
return redirect('/')
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
- defaults默認值
默認引數:1. defaults={‘id’:3}
視圖函式 id=3
from flask import Flask, redirect
# 撰寫了一個測驗用例名稱,我們測驗回傳的結果就是測驗用例的名稱
app = Flask(__name__)
@app.route('/')
def index():
return 'this is index'
print(app.url_map)
@app.route('/test',methods=['GET'],endpoint='tests',defaults={'id':3})
def get_case(id):
print('11')
print(f'hello{id}')
return redirect('/')
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
六、視圖函式的分離(非常重要)
舉個簡單例子

route_variable.py
from flask import Flask, redirect
# from route_one.urls import *
# 回圈匯入的解決方案
# 想用的時候再匯入
app = Flask(__name__)
# url應該是匯入所有的代碼,而不是某一個模塊
from route_one.urls import *
if __name__ == '__main__':
app.run(debug=True)
urls.py
from route_one import views
from route_one.route_variable import app
app.add_url_rule('/',view_func=views.index)
app.add_url_rule('/cases',view_func=views.cases)
views.py
def index():
return 'this is index'
def cases():
return 'this is cases'
注意:
- 回圈匯入的解決方案:
想用的時候再匯入 - url應該是匯入所有的代碼,而不是某一個模塊
https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265839.html
標籤:AI
