Python flask和flask_登录-避免从主代码导入flask_登录
我目前正在使用flask和flask\u登录编写一个简单的web应用程序。这是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
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
以某种方式“包装”mainindex()
函数
(实际上,我以前问了一个错误的问题,可能仍然相关:)创建一个文件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是的,当然。我认为,实际上,如果需要的话,这么多的代码分离就足够了。