首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flask_login和flask_login -避免从主代码导入flask

flask_login和flask_login -避免从主代码导入flask
EN

Stack Overflow用户
提问于 2016-08-13 16:50:51
回答 2查看 527关注 0票数 0

我目前正在使用flask和flask_login编写一个简单的web应用程序。这是main.py

代码语言:javascript
复制
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_loginmy_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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-13 18:02:11

创建文件my_auth.py

代码语言:javascript
复制
# 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

代码语言:javascript
复制
# 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!"

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

票数 3
EN

Stack Overflow用户

发布于 2016-08-13 18:19:50

我可以确认Akshay的答案是有效的。

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

main.py

代码语言:javascript
复制
@SVS.route("/")
def index():
    if not my_auth.is_authenticated():
        return flask.redirect(flask.url_for('login'))

    return "Hello World!"

my_auth.py

代码语言:javascript
复制
def is_authenticated():
    return flask_login.current_user.is_authenticated
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38930978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档