烧瓶和flask_login - 避免从主代码导入flask_login [英] flask and flask_login - avoid importing flask_login from main code

查看:221
本文介绍了烧瓶和flask_login - 避免从主代码导入flask_login的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  import flask 
import flask_login
$ b app = flask.Flask(__ name__)

login_manager = flask_login.LoginManager()
login_manager.init_app(app)

@ app.route('/')
@ flask_login.login_required
def index():
returnHello World!

上面的代码有效。问题出现了,因为我想从主要的应用程序代码中分离与认证相关的代码。换句话说,我想导入 flask_login my_auth.py ,并且我想要 main。 py import my_auth ,而不必导入 flask_login



问题在于 @ flask_login.login_required 修饰符。如果我不从 main.py 导入 flask_login ,是否仍然有可能包装主 index()函数与 login_required



其实问了一个错误的问题之前,这可能仍然是相关的:烧瓶和flask_login - 组织代码

解决方案

创建一个文件 my_auth.py p>

 #my_auth.py 

导入flask_login

login_manager = flask_login.LoginManager )

#创建login_required装饰器的别名
login_required = flask_login.login_required

和文件 main.py

 #main。 py 

从my_auth导入(
login_manager,
login_required

$ b $ app = flask.Flask(__ name__ )
login_mana ger.init_app(app)

@ app.route('/')
@login_required
def index():
returnHello World!

也许这就是你想达到的目的。


I am currently coding up a simple web application using flask and flask_login. This is 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!"

The above code works. The problem arises because I want to separate authentication related code from the main flask application code. In other words, I want my_auth.py that imports flask_login, and I want main.py to import my_auth, and NOT have to import flask_login.

The problem is with the @flask_login.login_required decorator. If I do not import flask_login from main.py, is it still possible to somehow "wrap" the main index() function with login_required?

(I've actually asked a wrong question before, which may still be relevant: flask and flask_login - organizing code)

解决方案

create a file 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

and in file 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!"

Maybe this is what you want to achieve.

这篇关于烧瓶和flask_login - 避免从主代码导入flask_login的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆