与Flask捆绑在一起的服务器是否可以安全地在生产环境中进行部署?如果没有,我应该使用什么来在生产中部署Flask?
我有一个 Flask 应用程序,它接受一些文本作为输入,运行一个 python 脚本并在同一个 html 页面上输出一个输出,除非它转到一个新页面。我不明白为什么它会转到一个新页面。
这是我的 app.py 文件:
#!/usr/bin/env python3
from flask import *
from flask import render_template
from myclass import myfunction
app = Flask(__name__)
@app.route('/')
def homepage():
return render_template('index.html')
@app.route('/', methods= ["POST"])
def background_process():
if request.method == 'POST':
try:
story = request.form.get('story')
if story:
result = myfunction(story)
return render_template('index.html', **jsonify(result))
else:
return jsonify(result='Input needed')
except Exception as e:
return (str(e))
if __name__ == "__main__":
app.debug=True
app.run()
Run Code Online (Sandbox Code Playgroud)
这是我的 index.html 文件:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="../static/main.css">
<script …Run Code Online (Sandbox Code Playgroud) 注意:该问题已作为重复结束,但不是(两个问题)。我在 Web 模式下专门描述了一个应用程序,然后在 WSGI 模式下 - 我毫不怀疑何时使用哪个(两个链接的问题都解决了这一点)。我还解释说,我很清楚 Web 服务器的用途。接受的答案很好地总结了这一点,并回答了 Web 服务器是否是运行 prod flask 应用程序的必要条件(不是)的问题。
我有一个flask应用程序。具有所有限制的开发版本是
import flask
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
app.run()
Run Code Online (Sandbox Code Playgroud)
当我想将它转移到生产,我用的gevent,按照部署文档:
import gevent.monkey
gevent.monkey.patch_all()
import flask
import gevent.wsgi
app = flask.Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
gevent.wsgi.WSGIServer(('127.0.0.1', 5000), app).serve_forever()
Run Code Online (Sandbox Code Playgroud)
两种情况都有效,第一种情况偶尔会出现问题(由于其性质,这并不意外)。
然后,我在这里和那里阅读的很多信息都提到,用于flask应用程序生产部署的第三个组件是 Web 服务器(Apache、nginx)。它对支持 WSGI 的 Flask 应用程序的实际用途是什么?
具体来说,我想了解它是否对flask应用程序的性能/稳定性有实际影响。
我知道网络服务器的各种用途是什么(身份验证、反向代理、白名单、重写、负载管理等等)。我的问题特别是关于网络服务器为烧瓶 WSGI 应用程序(如果有的话)提供什么。