2017-01-14 14 views
1

を持っていない私は、Webソケットプロジェクトのためにフラスコsocketioを使用していると私はフラスコblueprintを使用してビューをsplited。フラスコsocketioスプリットapp.py:はAttributeError:「青写真」オブジェクトが属性「wsgi_app」

|-- App 
| |-- __init__.py 
| |-- app.py 
| |-- templates 
| | |-- main.html 
| | |-- pymeetups.html 
| -- views 
|  |-- __init__.py 
|  | --- test.py 
|-- __init__.py 
|-- run.py 

run.py:

from gevent import monkey 
from flask import Flask, render_template, request 
from flask_socketio import SocketIO 
monkey.patch_all() 

from App.views import test 
app = Flask(__name__, template_folder='app/templates') 
app.register_blueprint(test.app) 
socketio = SocketIO(app) 

if __name__ == '__main__': 
    socketio.run(app, "0.0.0.0", port=80) 

テストを

/flask_socketio/__init__.py", line 31, in __init__ 
    flask_app.wsgi_app, 
AttributeError: 'Blueprint' object has no attribute 'wsgi_app' 

マイプロジェクト構造は、以下である:問題がsocketIOが正しく動作していないと、次のエラーを取得していますということです.py:

from flask import Blueprint, render_template, Flask 
from flask_socketio import SocketIO 
app = Blueprint('app', __name__) 

socketio = SocketIO(app) 


@app.route('/') 
def main(): 
    return render_template('main.html') 


@socketio.on('connect', namespace='/dd') 
def ws_conn(): 
    print("connect") 
    socketio.emit('msg', {'count': 1}, namespace='/dd') 


@socketio.on('disconnect', namespace="/dd") 
def ws_disconn(): 
    print("disconnect") 

問題文を使用して、test.pyファイルから来ている:

app.py:

from gevent import monkey 
from flask import Flask, render_template, request 
from flask_socketio import SocketIO 
monkey.patch_all() 


app = Flask(__name__) 
socketio = SocketIO(app) 


@app.route('/') 
def main(): 
    return render_template('main.html') 



@socketio.on('connect', namespace='/dd') 
def ws_conn(): 
    socketio.emit('msg', {'count': 1}, namespace='/dd') 


@socketio.on('disconnect', namespace='/dd') 
def ws_disconn(): 
    print("Disconnected") 



if __name__ == '__main__': 
    socketio.run(app, "0.0.0.0", port=80) 
フラスコの青写真を使用し、それが完璧に動作1つのファイルにすべてを組み合わせていけない場合

app = Blueprint('app', __name__) 

socketio = SocketIO(app) 

私は私のアプリケーションは、機能の多くを持っていることを期待するよう

は、どのように私はルートを分割することができ、単一のファイルにすべての機能を管理することは困難ですか。?ここにあなたのコード内の

答えて

2

A Blueprint object works similarly to a Flask application object, but it is not actually an application.

、あなたは青写真と拡張SocketIO(blueprint)を登録しようとしています。これは、アプリケーションの拡張ではない青写真拡張する必要があります。このような何かがあなたのために働く必要があります。

# For example my app structure like this 
- app/ 
    __init__.py 
    app.py 
    main/ 
     __init__.py 
     views.py 

#app/app.py 
from flask import Flask 
from flask_socketio import SocketIO 

app = Flask(__name__) 
socketio = SocketIO(app) 

from main import main 

app.register_blueprint(main, url_prefix='/main') 

if __name__ == '__main__': 
    socketio.run(app) 

#app/main/__init__.py 
from flask import Blueprint 

main = Blueprint('main', __name__) 

from . import views 

#app/main/views.py 
from . import main 
from app import socketio 

@main.route('/') 
def index(): 
     return "Hello" 

@socketio.on('connect', namespace='/dd') 
def ws_conn(): 
    socketio.emit('msg', {'count': 1}, namespace='/dd') 

@socketio.on('disconnect', namespace='/dd') 
def ws_disconn(): 
    print('Disconnected') 
+0

構造、あなたはショーに 'blueprint'に関連したエラーが指定されていないが、socketioが動作していません。いいえソケットが放出されません。 –

+1

ミゲルGringberg: https://github.com/miguelgrinberg/Flask-SocketIO-Chat:次の例のアプリケーションは、設計図を持っている大きなアプリケーションを構築する方法を示しています – metmirr

関連する問題