我目前正在使用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!"上面的代码可以工作。出现这个问题是因为我想将与身份验证相关的代码与主flask应用程序代码分开。换句话说,我想要导入flask_login的my_auth.py,我想要main.py to import my_auth,而不必导入flask_login。
问题出在@flask_login.login_required装饰器上。如果我不从main.py导入flask_login,是否仍然可以用login_required以某种方式“包装”主index()函数
(我之前实际上问了一个错误的问题,可能仍然相关:flask and flask_login - organizing code)
发布于 2016-08-13 18:02:11
创建文件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!"也许这就是你想要实现的目标。
发布于 2016-08-13 18:19:50
我可以确认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_authenticatedhttps://stackoverflow.com/questions/38930978
复制相似问题