摘要:鍵是函數名,值是函數對象,函數名也用于生成。注冊一個視圖函數,用裝飾器。獲取儲存視圖函數字典中的函數對象視圖函數類中的字典儲存了注冊的視圖函數名和視圖函數對象。輸出視圖函數視圖函數名重復修改解決
那天莫名其妙出了個錯。。就順便看了看Flask路由
在flask存儲路由函數是以函數名為鍵,函數對象為值
class Flask: def __init__(self, *args, **kwargs): #所有視圖函數的注冊將被放在字典。鍵是函數名,值是函數對象,函數名也用于生成URL。注冊一個視圖函數,用route裝飾器。 self.view_functions= {}
app.route裝飾器注冊視圖函數
def route(self, rule, **options): #用來給給定的URL注冊視圖函數的裝飾器,也可以用add_url_rule函數來注冊。endpoint關鍵字參數默認是視圖函數的名字 def decorator(f): endpoint = options.pop("endpoint", None) #pop刪除endpoint的值沒有為None并返回它賦值給endpoint self.add_url_rule(rule, endpoint, f, **options) #調用add_url_rule函數 return f return decorator
add_url_rule函數
def add_url_rule(self, rule, endpoint=None, view_func=None, provide_automatic_options=None, **options): if endpoint is None: endpoint = _endpoint_from_view_func(view_func) #_endpoint_from_view_fun函數返回視圖函數名view_fun.__name__ options["endpoint"] = endpoint #...... if view_func is not None: old_func = self.view_functions.get(endpoint) if old_func is not None and old_func != view_func: raise AssertionError("View function mapping is overwriting an " "existing endpoint function: %s" % endpoint) #old_func對象從儲存視圖函數的字典中取出,如果它不為空并且不等于視圖函數那么就會報錯視圖函數覆蓋當前端點函數,如果有同名函數可以通過修改endpoint值來避免這個錯誤。 self.view_functions[endpoint] = view_func #函數名作為鍵,函數對象作為值存儲到view_functions中。
獲取儲存視圖函數字典中的函數對象
from flask import Flask app = FLask(__name__) @app.route("/") def index(): return "視圖函數:{} /endpoint:{}
".format(app.view_functions.get("index","None").__name__, app.view_functions.keys()) #FLask類中的view_functions字典儲存了注冊的視圖函數名和視圖函數對象。函數名為endpoint默認就是視圖函數的名字,get方法獲得視圖函數對象,__name__過的函數名。這個字典的鍵就是endponit的值。 輸出: endpoint:dict_keys(["static", "index"])/視圖函數:index
如果自定義endponit = "hello"
@app.route("/", endpoint="hello") def index(): return "endpoint:{}/視圖函數:{}
".format(app.view_functions.keys(), app.view_functions.get("hello","None").__name__) #字典鍵值就是endponit值改為自定義的值來獲取試圖函數對象。 輸出: endpoint:dict_keys(["static", "hello"])/視圖函數:index
視圖函數名重復
@app.route("/s/") def a(): return "helloooo" @app.route("/ss/") def a(): return "ahahaha" #AssertionError: View function mapping is overwriting an existing endpoint function: a
修改endpoint解決
@app.route("/s/", endpoint="h") def a(): return "helloooo" @app.route("/ss/") def a(): return "ahahaha"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/43691.html
摘要:開發(fā)實戰(zhàn)筆記安裝和使用虛擬環(huán)境虛擬環(huán)境是解釋器的一個私有副本,在這個環(huán)境中你可以安裝私有的包,而且不會影響系統中安裝的全局的解釋器。處理和函數之間關系的程序稱為路由。例如在請求開始時,我們需要創(chuàng)建數據庫連接或認證發(fā)起請求的用戶。 幾天前和同事一起喝酒,大家談到為什么開始讀書這件事。這里所說的讀書不是專業(yè)的書籍,而是一些閑書。結果發(fā)現原來我們開始讀書的原因很功利。都是因為生活中遇到了困...
摘要:本篇對應書本第二章程序的基本結構。初始化導入模塊創(chuàng)建類的實例注對于開發(fā)者來說,傳給應用程序構造函數的參數是比較容易弄混淆的。不同的請求方法發(fā)送到相同的上時,會使用不同的視圖函數進行處理。 本系列筆記是我閱讀Miguel Grinberg的《Flask Web Development》的筆記,標題與書本同步。希望通過記錄技術筆記的方式促進自己對知識的理解。 本篇對應書本第二章:程序的基本...
摘要:有兩類應用級和請求級。一個響應中非常重要的部分是狀態(tài)碼,默認設置來指示請求已經成功處理。重定向通常由響應狀態(tài)碼注明并且重定向的由頭部的給出。因為這些變化,應用程序獲得一組基本的命令行選項。運行顯示可用信息在應用程序上下文的內部運行一個。 5、請求-響應循環(huán) 現在你已經玩過一個基本的Flask應用程序,你也許想要知道更多關于Flask如何施展魔力。下面章節(jié)描述了一些框架設計方面的特點。...
閱讀 2482·2021-11-25 09:43
閱讀 1309·2021-11-24 09:39
閱讀 825·2021-11-23 09:51
閱讀 2450·2021-09-07 10:18
閱讀 1971·2021-09-01 11:39
閱讀 2837·2019-08-30 15:52
閱讀 2648·2019-08-30 14:21
閱讀 2917·2019-08-29 16:57