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