4

Flask-SocketIO を Flask アプリケーションに統合しようとしています。

from .. import socketio何らかの理由で、events.py にあるによってトリガーされるインポート エラーが発生しますが、その理由が わかりません。

提供されたヘルプに感謝します。

app.py

from factory import create_app
app = create_app()

factory.py

from flask import Flask
from flask.ext.socketio import SocketIO
from flask.ext.login import LoginManager
import os
from celery import Celery

lm = LoginManager()
socketio = SocketIO()
lm.login_view = 'main.login'
lm.session_protection = 'strong'


def create_app():
    app = Flask(__name__)
    app.config.from_object(os.environ.get('APP_CONFIG'))  # export APP_CONFIG=settings.Development
    lm.init_app(app)

    from project.main import main as main_blueprint

    app.register_blueprint(main_blueprint)
    socketio.init_app(app)

    return app

main/____init____.py

from flask import Blueprint

main = Blueprint('main', __name__)
import views, events

メイン/events.py

# from __future__ import absolute_import
from uuid import uuid4
from flask import current_app, session, request
from flask.ext.socketio import emit, disconnect
from .. import socketio

@socketio.on('status', namespace='/events')
def events_message(message):
    print 'socketio.on: status'
    emit('status', {'status': message['status']})


@socketio.on('disconnect request', namespace='/events')
def disconnect_request():
    print 'socketio.on: disconnect request'
    emit('status', {'status': 'Disconnected!'})
    disconnect()


@socketio.on('connect', namespace='/events')
def events_connect():
    print 'socketio.on: connect'
    websocket_id = str(uuid4())
    session['websocket_id'] = websocket_id
    current_app.clients[websocket_id] = request.namespace
    emit('websocket_id', {'websocket_id': websocket_id})
4

1 に答える 1

4

名前を変更main/____init____.pyするmain/__init__.pyと、次のことができます。

from . import socketio

あなたが言ったようにsocketio定義されて__init__.pyいる場合。ただし、 で定義されているように見えfactory.pyます。その場合は、次のようにします。

from ..factory import socketio
于 2015-04-19T22:37:35.630 に答える