2017-05-26 81 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代碼比特。