python框架flask入門之路由及簡單實現(xiàn)方法
路由
簡單來說,路由就是一個url到函數(shù)的映射,通過路由規(guī)則,可以使得url被指定的函數(shù)進行處理解析。
我們都知道現(xiàn)在的web系統(tǒng)的URL都是可以自定義的,也就是我們可以指定url和具體的業(yè)務控制器相關聯(lián),而這些就是通過路由來實現(xiàn)的。
flask中集成了路由處理模塊,我們只需要簡單地使用route裝飾器就可以實現(xiàn)路由匹配。
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
上面的例子中,我們訪問瀏覽器的時候,比如輸入http://127.0.0.1/ 就會返回'index page',當輸入http://127.0.0.1/hello 就會返回‘Hello World',這就是路由的基本使用。
@app.route('/user/<username>')
def show_user(username):
return username
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % escape(subpath)
從上面的例子我們可以看出,flask的路由還可以進行參數(shù)匹配,比如我們可以通過<>來對參數(shù)進行獲取,可以獲取到文章的id,獲取到用戶名等參數(shù)信息,也就是說,我們可以通過路由匹配來對指定的url進行處理。
關于url中斜線(/)的處理當我們在路由中定義了斜線,那么當我們訪問沒有斜線的url的時候,它會自動添加斜線當我們在路由中沒有定義斜線的時候,那么我們訪問有斜線的時候,會提示404
@app.route('/test/')
#當我們訪問http://127.0.0.1/test的時候,會重定向到http://127.0.0.1/test/
def test():
return 'test'
@app.route('slashes')
#當我們訪問http://127.0.0.1/slashes/的時候,會提示404,無法匹配到路由
def slashes():
return 'slashes'
下面看下Python Flask框架路由簡單實現(xiàn)
也許你聽說過Flask框架。也許你也使用過,也使用的非常好。但是當你在瀏覽器上輸入一串路由地址,跳轉(zhuǎn)至你所寫的頁面,在Flask中是怎樣實現(xiàn)的,你是否感到好奇? 如果你不清楚,那就往下看看吧 ~
Flask demo代碼
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<a href="/home">Hello World!</a>'
@app.route("/home")
def home():
return "這個是主頁"
@app.route("/login")
def login():
return "這個是登錄"
if __name__ == '__main__':
app.run(debug=True)
當你在瀏覽器地址上輸入路徑,進入不同視圖函數(shù)。
1.輸入路徑為:"/"

2.輸入路徑為:"/home"

3.輸入路徑為:"/login"

是不是很神奇~ 接下來讓我們看看他是如何實現(xiàn)的吧!
簡單實現(xiàn)(廢話不多說,直接上碼?。?/p>
"""
Flask 路由簡單實現(xiàn)
map: {"/home":"home", "/login":"login", ...}
"""
map = dict()
def route(path):
def decorator(f):
print(path, f.__name__, "<-----------start---------->")
map[path] = f.__name__
return f
return decorator
class TestFlaskRoute:
def __init__(self, path):
self.path = path
def find_url(self):
try:
getattr(TestFlaskRoute, map.get(self.path)).__call__(self)
except:
print("\033[031m 沒有這個路徑! \033[0m ")
@route("/login")
def login(self, *args, **kwargs):
print("\033[036m 這個是登錄! \033[0m")
pass
@route("/home")
def home(self, *args, **kwargs):
print("\033[036m 這個是主頁! \033[0m")
pass
@route("/")
def index(self, *args, **kwargs):
print("\033[036m Hello World! \033[0m")
pass
@route("/call")
def phone(self, *args, **kwargs):
print("\033[036m 這個是", self.path, "! \033[0m")
pass
if __name__ == '__main__':
while True:
url = input("請輸入URL路徑:")
app = TestFlaskRoute(url)
app.find_url()
在這里我們用模擬瀏覽器輸入方式來完成,當我們輸入"/",它會去找對應路徑下index() 執(zhí)行 ; 輸入"/home",它會去找對應路徑下home() 執(zhí)行;輸入"/login",它會去找對應路徑下 login() 執(zhí)行,怎樣是不是很神奇,是不是很像Flask。其實Flask就是這樣的思路實現(xiàn)的。
效果:

解析實現(xiàn)(3步)
a.當程序啟動時,先執(zhí)行了route()這個裝飾器,拿到了所有路徑、對應函數(shù)并將它們存在map這個字典中,以路徑為key,對應函數(shù)名為value。(注:在Flask是以Route類來存這些信息的哦,所以還是有些區(qū)別的~)
b.當你輸入路徑或者在瀏覽器上輸入路徑,會以key的形式到map字典中匹配,取出value(函數(shù)名)。
c.得到value通過getattr()得到函數(shù)地址,然后用內(nèi)置__call__()方法,執(zhí)行這個函數(shù)
總結(jié)
到此這篇關于python框架flask入門之路由及簡單實現(xiàn)方法的文章就介紹到這了,更多相關python框架flask 路由內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python pandas dataframe之重命名相同列名
這篇文章主要介紹了Python pandas dataframe之重命名相同列名方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
在Django中自定義filter并在template中的使用詳解
這篇文章主要介紹了在Django中自定義filter并在template中的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python實現(xiàn)逆序輸出一個數(shù)字的示例講解
今天小編就為大家分享一篇python實現(xiàn)逆序輸出一個數(shù)字的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06

