Python flask和flask_登录-避免从主代码导入flask_登录

Python flask和flask_登录-避免从主代码导入flask_登录,python,flask,flask-login,Python,Flask,Flask Login,我目前正在使用flask和flask\u登录编写一个简单的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

我目前正在使用flask和flask\u登录编写一个简单的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!"
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"
def is_authenticated():
    return flask_login.current_user.is_authenticated
上述代码有效。出现这个问题是因为我想将身份验证相关代码与主应用程序代码分开。换句话说,我想要导入
flask\u登录名的
my\u auth.py
,我想要
main.py
导入my\u auth
,而不必导入
flask\u登录名

问题在于
@flask\u login.login\u必需
decorator。如果我没有从
main.py
导入
flask\u login
,是否仍然可以用
login\u required
以某种方式“包装”main
index()
函数


(实际上,我以前问了一个错误的问题,可能仍然相关:)

创建一个文件
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

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!"
在文件
main.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

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!"

也许这就是你想要实现的。

创建一个文件
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

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!"
在文件
main.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

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!"

也许这就是你想要实现的。

我可以证实阿克谢的答案是有效的

然而,在等待答案的同时,我还发现了一个不依赖于使用装饰器的解决方法(?):

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!"
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"
def is_authenticated():
    return flask_login.current_user.is_authenticated
my_auth.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!"
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"
def is_authenticated():
    return flask_login.current_user.is_authenticated

我可以证实阿克谢的答案是正确的

然而,在等待答案的同时,我还发现了一个不依赖于使用装饰器的解决方法(?):

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!"
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"
def is_authenticated():
    return flask_login.current_user.is_authenticated
my_auth.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!"
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"
def is_authenticated():
    return flask_login.current_user.is_authenticated

为什么您不想将
flask\u login
导入
main.py
?关注点分离-尝试了解我可以多么干净地将登录部分从主代码中分离出来。为什么您不想将
flask\u login
导入
main.py
?关注点分离-尝试了解我可以多么干净将登录端与主代码分开。@wooke919是的,当然。我认为实际上,如果你需要的话,这么多的代码分离就足够了。@wooke919是的,当然。我认为,实际上,如果需要的话,这么多的代码分离就足够了。