我是Flask和flask-socketio
的新手。
我第一次使用Flask官方文档制作教程应用程序。
然后我用flask-socketio
制作了一个简单的聊天应用程序。
我需要的是Flask教程中的身份验证系统和SocketIO教程中的简单聊天功能。
Flask教程在__init__.py
中的create_app
方法中运行Flask应用程序。
__init__.py:
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
# ...
return app
SocketiIO教程只有一个运行SocketIO应用程序的main.py
文件。
main.py:
app = Flask(__name__)
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)
@app.route('/')
def sessions():
return render_template('session.html')
# ...
if __name__ == '__main__':
socketio.run(app, debug=True)
我读过很多关于将flask-socketio
与已经制作的Flask应用程序集成的问题,但所有这些问题都试图使用main.py
文件进行集成,您可以将socketio.run()
方法放在if __name__
中运行。
是否可以在同一个应用程序中同时运行http服务器和socket服务器,从create_app
方法初始化应用程序?
对于有这个问题的人,包的创建者在这里教他们如何处理这个问题。
socketio = SocketIO()
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
# ...
socketio.init_app(app)
return app
只需要创建一个全局SocketIO对象,然后在creat_app
中启动即可。