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