1. 程式人生 > >藍圖裝飾並註冊後,url_map中沒有相關路由

藍圖裝飾並註冊後,url_map中沒有相關路由

問題背景:寫一個小demo,模組較多,需要藍圖管理。

專案結構大致如下:

├── app
│   ├── auth
│   │   ├── __init__.py
│   │   └── views.py
└── app.py

問題描述:在auth/__init__.py中定義了藍圖,在auth/views.py中引入藍圖,用它裝飾了檢視函式。在app.py中註冊之後,開始執行,瀏覽器顯示404,列印url_map,沒有該藍圖裝飾的路由。

程式碼如下:

auth/__init__.py

from flask import Blueprint

authbp=Blueprint('auth',__name__)

auth.views.py

from auth import authbp

@authbp.route('/login/',methods=['GET','POST'])
def login():

app.py

from auth import authbp

app.register_blueprint(authbp,url_prefix='/auth/')

問題定位:

定義及裝飾過程沒有錯誤,重點看註冊。

註冊過程引數正確,檢視引入步驟。

引入時,直接從auth引入。從auth引入,相當於直接從auth/__init__.py引入。

此時的藍圖還未裝飾檢視函式。

總結根因:

藍圖定義時,並未將規則新增到defered_functions。此時直接註冊,相當於呼叫add_url_rule,添加了空的規則。

修改:

引入裝飾後的藍圖。

from auth.view import authbp