2017-05-26 82 views
0

我试图烧瓶SocketIO与我的瓶应用程序集成。烧瓶SocketIO蓝图抛出错误

出于某种原因,我得到一个由 从应用程序导入插座引发的导入错误; ,我有我的admin.py,我不知道为什么。

我将不胜感激提供的任何帮助。

admin_online/admin.py

from flask_socketio import send, emit 
from flask_socketio import join_room, leave_room 
from app import sockets; 
#from .. import sockets//error 
# from ..app import socket //also an error 
from flask import Blueprint 


admin_online=Blueprint('admin_online', __name__) 

@sockets.on('add-message', namespace='/') 
def send_disconnect(message): 
    print ',messae'; 
    emit('message', message) 


@sockets.on('disconnect', namespace='/') 
def test_disconnect(): 
    realoutput = "No" 
    print 'dscone'; 


@sockets.on('join', namespace='/') 
def on_join(data): 
    username = data['username'] 
    room = data['room'] 
    print 'coonectg'+username; 
    join_room(room) 
    emit('message', username) 


@sockets.on('leave', namespace='/') 
def on_leave(data): 
    username = data['username'] 
    room = data['room'] 
    leave_room(room) 
    print 'leaving'; 
    emit('message', username) 

app.py

from flask import Flask 
from mongo import init_mongo 
from mail import init_flask_mail 
from celery import Celery 
from sockets import init_sockets 
from admin_online import admin 


def init_app(): 
    return Flask(__name__) 


app = init_app() 

# Celery configuration 
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 
app.config['CELERY_REDIRECT_STDOUTS_LEVEL'] = 'INFO' 


def make_celery(): 
    celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], 
        broker=app.config['CELERY_BROKER_URL']) 
    celery.conf.update(app.config) 
    TaskBase = celery.Task 
    class ContextTask(TaskBase): 
     abstract = True 
     def __call__(self, *args, **kwargs): 
      with app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 
    celery.Task = ContextTask 

    return celery 

with app.app_context(): 
    init_flask_mail() 
    init_mongo() 
    sockets = init_sockets() 



##imported here TOO but not worked from admin_online import admin 
app.register_blueprint(admin.admin_online) 




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

socket.py

from flask import current_app as app 
from flask_socketio import SocketIO 

socketio = None 

def init_sockets(): 
    return SocketIO(app) 

应用程式结构

admin_online/admin.py

app.py

sockets.py

错误

Traceback (most recent call last): 
    File "app.py", line 19, in <module> 
    from admin_online import admin 
    File "E:\Iccacerate\ICaccerate-Backend\icarcerate-backend\admin_online\admin.py", line 3, in <module> 

from app import sockets; 

    File "E:\Ii\app.py", line 19, in <module> 

    from admin_online import admin 

ImportError: cannot import name admin 

回答

0

你有圆形进口。问题如下:

  • app.py,尝试从admin_online.py进口admin(注意,这高于sockets被定义在app.py的地方)
  • admin_online/admin.py,尝试从app.py进口sockets,这还不存在,因为解释未完成的app.py解析呢。

一种可能的解决方案是移动的,在app.py上述from admin_online import admin线初始化sockets代码比特。