Flask 和 Flask-SocketIO 集成和导入错误

Posted

技术标签:

【中文标题】Flask 和 Flask-SocketIO 集成和导入错误【英文标题】:Flask and Flask-SocketIO integration and import errors 【发布时间】:2015-06-26 12:08:37 【问题描述】:

我正在尝试将 Flask-SocketIO 与我的 Flask 应用程序集成。

由于某种原因,我收到一个由 from .. import socketio 在我的 events.py 中有,我不知道为什么。

如果能提供任何帮助,我将不胜感激。

app.py

from factory import create_app
app = create_app()

工厂.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

main/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)

【问题讨论】:

如何在生产中使用它?我的意思是eventlet 服务器。 【参考方案1】:

main/____init____.py重命名为main/__init__.py,你可以这样做:

from . import socketio

如果socketio 像你说的那样在__init__.py 中定义。但是,它看起来像是在 factory.py 中定义的,在这种情况下你会这样做:

from ..factory import socketio

【讨论】:

好吧,当我在 SO 上输入我的 init 文件的名称时,我一定是输入了一对多的 _。

以上是关于Flask 和 Flask-SocketIO 集成和导入错误的主要内容,如果未能解决你的问题,请参考以下文章

使用flask和flask-socketio配置nginx、uwsgi

[翻译] flask-SocketIO

使用 Flask-socketio 和 socketIO 客户端

flask-SocketIO 和 eventlet 有问题

Flask-SocketIO发送图像

Flask-SocketIO 的发射函数线程安全吗?