簡體   English   中英

flask和flask_login-避免從主代碼導入flask_login

[英]flask and flask_login - avoid importing flask_login from main code

我目前正在使用flask和flask_login編寫一個簡單的Web應用程序。 這是main.py

import flask
import flask_login

app = flask.Flask(__name__)

login_manager = flask_login.LoginManager()
login_manager.init_app(app)

@app.route('/')
@flask_login.login_required
def index():
    return "Hello World!"

上面的代碼有效。 出現問題是因為我想將與身份驗證相關的代碼與主燒瓶應用程序代碼分開。 換句話說,我希望my_auth.py導入flask_login ,並且我希望main.py import my_auth ,而不必導入flask_login

問題出在@flask_login.login_required裝飾器。 如果我不從main.py導入flask_login ,是否仍然可以通過login_required以某種方式“包裝”主index()函數?

(實際上,我之前曾問過一個錯誤的問題,可能仍然很重要: flask and flask_login-組織代碼

創建一個文件my_auth.py

# my_auth.py

import flask_login

login_manager = flask_login.LoginManager()

# create an alias of login_required decorator
login_required = flask_login.login_required

並在文件main.py

# main.py

import flask
from my_auth import (
    login_manager,
    login_required
)

app = flask.Flask(__name__)
login_manager.init_app(app)

@app.route('/')
@login_required
def index():
    return "Hello World!"

也許這就是您想要實現的。

我可以確認Akshay的答案有效。

但是,在等待答案的同時,我還發現了一種不依賴使用裝飾器的解決方法(?):

main.py

@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"

my_auth.py

def is_authenticated():
    return flask_login.current_user.is_authenticated

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM