python-web框架flask:引入藍圖和遇到的問題

參考:flask官網

1、什麼是藍圖

       當我們的程序只有一個文件的時候(比較小的時候),我們可以直接在這個文件中進行啓動,沒有問題,但是當我們的程序變得很大的時候,我們需要進行分級,也可以說是分模塊,那麼對於每個模塊來說,怎麼去訪問到他的路徑呢,這裏就要用到我們的藍圖了。藍圖可以看做是全局和局部模塊溝通的一個工具,看一下官網的解釋:

藍圖方式是把它們註冊到藍圖,然後在工廠函數中 把藍圖註冊到應用。

2、藍圖配置

       話說什麼是藍圖,其實官網給出瞭解釋,比如這篇文章:藍圖與視圖,其實一開始在網上找各種資料的時候,我是懵逼的,後面自己做了一下實驗發現說原來他這個東西道理其實很簡答,無非就是局部聲明,全局註冊。

       按照官網的說法,應該是在你的某個模塊(這邊的模塊指的是一個py文件)聲明一個視圖,然後在這個模塊對應的**—init**方法中進行註冊。
我們來看一下下圖解釋:
在這裏插入圖片描述
       正常情況下是直接在 init 類裏面進行註冊,我這邊是直接放到路由裏面進行註冊,註冊只是一種方式,主要是看如何管理這個東西,在路由裏面註冊相對更集中,而在 init 類裏面進行註冊相對更加清晰。

       當然還有一種方式就是直接在模塊的py文件當中進行註冊,這當然是一種可行的方法,但是需要注意的就是循環引用的問題,舉個例子就是說,可能你在當前模塊中引入了路由中的app對象,然後又需要在路由當中引入當前模塊的藍圖對象,這樣就會有問題,或者說是多級的循環引用,這種方式感覺不是很推薦
在這裏插入圖片描述
       當然還有一種更集中化的註冊方式就是在在 init 類中聲明和註冊,然後,在模塊對應的文件中引入該聲明的藍圖對象,這種方式應該說就是實現比如說你一個模塊的文件很多的時候,我只需要聲明和註冊一個藍圖就行了。
在這裏插入圖片描述

我們來看一下,我這邊的實現方式和注意的地方,上代碼:
在這裏插入圖片描述
需要注意的幾個地方就是:

  • 在模塊中要使用當前聲明的藍圖標籤進行路徑的引用,不然可能造成循環引用問題。
  • 藍圖聲明之後需要註冊才能生效。

3、遇到問題

1、循環引用問題 ImportError

       這個問題在我上面一個文章也有說明,其實還是比較噁心的,層次結構會有所引用,這邊採取在函數中import的方式來解決,最好的方式當然是層次劃分的足夠清楚。此間不多贅述。
在這裏插入圖片描述

2、重名問題 AssertError

       一個藍圖對應一個名字,這個就跟java的map一個道理,一個key只能對應一個value,這邊其實處理和spring啓動的處理有點類似,當你重名的時候沒辦法區分,直接報錯,所以當我們引入藍圖的時候,一定要注意的就是重名問題。
在這裏插入圖片描述

3、html請求路徑問題 werkzeug.routing.BuildError

       圖片中的最後一個錯誤信息其實已經說明了問題,可能很多人會錯誤的把錯誤以爲成,是我們在定義入參的錯誤,其實不是,這邊是html路徑問題,tmd這個錯誤報的也是奇葩啊。
在這裏插入圖片描述

看一下怎麼解決:
       我們在log這個文件中定義了一個藍圖叫做api,然後我們會進入一個render模板,在這個模板裏面還會請求api這個藍圖對應的路徑,我們原先這個url_for是沒有加上api.的,所以會報錯,因爲他識別不出來到底是哪個接口(因爲我們引入了藍圖)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章