微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 Flask 连接与 redis 一起使用?

如何解决如何将 Flask 连接与 redis 一起使用?

这是我的 main.py 文件

from flask_redis import FlaskRedis
from controllers.utils import redis_conn # get Redis URL
import connexion

BASE_PATH = "/"

def create_app(*specs):

    _app = connexion.App(__name__)

    for s in specs:
        logger.info("Adding specs {}".format(s))
        _app.add_api(s,validate_responses=True)

    return _app

app = create_app("specs.yaml")

rd_app = app.app
rd_app.config['REdis_URL'] = redis_conn()

redis_client = FlaskRedis(rd_app)


if __name__ == '__main__':
    app.run(host='127.0.0.1',port=5000,debug = True)

Redis 似乎有问题并产生此错误

导入错误:无法从部分导入名称“redis_client” 初始化模块“main”(很可能是由于循环导入)

我找不到任何将 connexion 与 Redis 结合使用的教程。 用法示例 get_fruit.py

from main import redis_client

def get_fruit(colour,shape,taste):

    hash_name = rd_collections[colour+'_'+shape]
    key_name = '{}:{}'.format(hash_name,taste)
    response_redis = redis_client.get(name=key_name)

    if response_redis is None:

        result = get_fruit_name(colour,taste)

        logger.debug("Updating Redis by adding {}".format(location_id))

        redis_client.set(name=key_name,value=json.dumps(result['fruit_id']),ex=60*60)
        result = OrderedDict({'Result': result})

        return result

    else:
        ...

更新:

按照建议尝试:

def create_app(*specs):
    """
    Running apps using connexion
    """
    _app = connexion.App(__name__)

    rd_app = _app.app
    rd_app.config['REdis_URL'] = redis_conn()
    rd_client = FlaskRedis(rd_app)

    for s in specs:
        logger.info("Adding specs {}".format(s))
        _app.add_api(s,validate_responses=True)

    return _app,rd_client

app,redis_client = create_app("specs.yaml")

但仍然产生同样的错误

解决方法

避免循环导入的标准方法如下。

使用您的配置创建一个 config.py 文件。

from controllers.utils import redis_conn # get Redis URL

class MyConfig(object):
    REDIS_URL = redis_conn()

创建一个 wsgi.py 文件。这将是您应用的起点。

from config import MyConfig
import app_factory

app = app_factory.create_app(MyConfig)

if __name__ == "__main__":
    with app.app_context():
        app.run()

使用应用工厂模式创建一个 app_factory.py 文件:

redis_client = FlaskRedis()

def create_app(config):
    app = Flask(__name__)
    app.config.from_object(config)
    redis_client.init_app(app)
    return app

用你的路线创建一个文件 routes.py:

from app_factory import redis_client

@bp.route('/')
def index():
    return redis_client.get('potato')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?