【问题标题】:Implementing Flask-WhooshAlchemy using an Application Factory使用应用程序工厂实现 Flask-WhooshAlchemy
【发布时间】:2014-06-20 11:32:37
【问题描述】:

如果应用是在全局范围内创建的

__init__.py

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')
from app import views

run.py 下面的这段代码将是 enuf 开始在 views.py 中使用 whoosh_search,如 post = Post.query.whoosh_search(name, limit=3).all()

run.py

import os
from app import app


from flask.ext.script import Manager
from flask.ext.moment import Moment

from flask.ext.sqlalchemy import SQLAlchemy
import flask.ext.whooshalchemy as whooshalchemy


basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] =\
    'sqlite:///' + os.path.join(basedir, 'post.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SECRET_KEY'] = 'hard to guess string'

db = SQLAlchemy(app)

manager = Manager(app)
moment = Moment(app)

class Post(db.Model):
    __tablename__ = 'post'
    __searchable__ = ['body']
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime))

    def __repr__(self):
        return '<Post %r>' % (self.body)

whooshalchemy.whoosh_index(app, Post)

if __name__ == '__main__':
    db.create_all()
    manager.run()

那么如何使用Application Factory 来实现Flask-WhooshAlchemy。

__init__.py

from flask import Flask
from flask.ext.bootstrap import Bootstrap
from flask.ext.moment import Moment
from flask.ext.sqlalchemy import SQLAlchemy
from config import config

bootstrap = Bootstrap()
moment = Moment()
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    moment.init_app(app)
    db.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app

如何将app 在whooshalchemy.whoosh_index(app, Post) 中注册到应用程序工厂,以便whoosh_search 可以像上一个示例一样在views.py 中使用。

【问题讨论】:

    标签: python python-2.7 flask flask-sqlalchemy


    【解决方案1】:

    在您的应用程序工厂函数 fx.在初始化所有应用程序之后,在注册您的蓝图之前。您应该导入您的模型并运行 whoosh_index。大致如下:

      from .model import Post
      whooshalchemy.whoosh_index(app, Post)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多