我有@login_required
裝飾器,用於裝飾控制器的動作。但是,我的應用程序非常大,並且在許多不同的控制器文件中有大量的路由。逐一去裝飾每條路線似乎很容易出錯(我可能很容易錯過一條)並且耗時。燒瓶:一次裝飾每條路線?
有沒有辦法在整個應用程序中一次裝飾所有路線?
我正在將身份驗證從Web服務器(apache)移動到應用程序級別,這就是爲什麼我有這個問題。
我有@login_required
裝飾器,用於裝飾控制器的動作。但是,我的應用程序非常大,並且在許多不同的控制器文件中有大量的路由。逐一去裝飾每條路線似乎很容易出錯(我可能很容易錯過一條)並且耗時。燒瓶:一次裝飾每條路線?
有沒有辦法在整個應用程序中一次裝飾所有路線?
我正在將身份驗證從Web服務器(apache)移動到應用程序級別,這就是爲什麼我有這個問題。
你可以走了相反的方式,並使用before_request
裝飾要求的默認登錄,並使用定製的裝飾來標記做不需要登錄的路線,例如:
_insecure_views = []
@my_blueprint.before_request
def require_login():
if request.endpoint in _insecure_views:
return
# check for login here
def login_not_required(fn):
'''decorator to disable user authentication'''
endpoint = ".".join([some_blueprint.name, fn.func_name])
_insecure_views.append(endpoint)
return fn
@some_blueprint.route('/')
@login_not_required
def index():
pass
你也許可以換即將其轉換爲其自己的派生藍圖/ Flask類。
編輯:基本上Best way to make Flask-Login's login_required the default
感謝這和其他職位的鏈接。 ''app.view_functions''是我一直在尋找的祕密武器。只要有對這些功能的引用,url就可以映射到這些功能。 – steve
您是否試過編寫修改過的路由器? – ferrix
簡單的'login_required'檢查總是對你來說足夠了嗎?我總是最終需要不同用戶的不同級別的權限,所以我用'require_privilege('特權名')'裝飾所有東西。如果你決定走這條路,我會問,但除了裝飾每一條路線(他們需要不同的權限)之外,真的沒有辦法。 – zvone
@ferrix不,我沒有聽說過,但我會檢查出來。不,我們沒有不同的權限/角色。每個用戶都有相同的權限。 – steve