繁体   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