藍圖裝飾並註冊後,url_map中沒有相關路由
阿新 • • 發佈:2018-12-17
問題背景:寫一個小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