python-3.x - flask socketio拆分app.py : AttributeError: 'Blueprint' object has no attribute 'wsgi_app'

标签 python-3.x flask flask-socketio

我正在使用 flask socketio 进行网络套接字项目,并使用 flask blueprint Split View.问题是 socketIO 无法正常工作并且出现以下错误:

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

我的项目结构如下:
|-- App
|   |-- __init__.py
|   |-- app.py
|   |-- templates
|   |   |-- main.html
|   |   |-- pymeetups.html
|   -- views
|       |-- __init__.py
|       | --- test.py
|-- __init__.py
|-- run.py

运行.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)

测试.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 = Blueprint('app', __name__)

socketio = SocketIO(app)

如果不使用 flask 蓝图并将所有内容合并到一个文件中,它会完美运行:

应用程序.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)

我如何分割路线,因为我希望我的应用程序有很多功能,并且很难将所有功能管理到一个文件中。?

最佳答案

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')

关于python-3.x - flask socketio拆分app.py : AttributeError: 'Blueprint' object has no attribute 'wsgi_app' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653320/

相关文章:

python - Flask Docker应用程序不提供API并且在Docker镜像内未找到文件

python - flask -mqtt : Mqtt Client disconnects immediately after connect

python - Flask SocketIO 从服务器发送消息到房间

python - 如何在 Django 的 GenericStackedInline 管理中访问请求对象

python - 将 PyQt5 按钮连接到函数时如何使用 lambda

python - 在 Ubuntu 14.04 上安装 Python 3 的 trepan 调试器

python - GET/socket.io/?EIO=3&transport=polling&t=MniHjPM HTTP/1.1

Python3 askopenfilename错误

python - 将 JSON 从 flask 传递到模板并解码 html 实体

javascript - Flask-SocketIO 没有收到消息