Python 有很多流行的 Web 框架,如 Flask、Django、FastAPI 等。这些框架提供了构建 Web 应用程序所需的各种工具和功能。
- Flask:轻量级 Web 框架,易于学习和使用,适用于小型项目和快速原型开发。
- Django:功能强大的 Web 框架,提供了丰富的内置功能和可扩展性,适用于大型复杂的应用程序。
- FastAPI:现代、快速(高性能)的 Web 框架,用于构建 API,支持异步操作,基于 Python 3.6+ 的类型提示。
要实现Python后端与前端的对接,通常使用的方法是通过Web框架,如Flask或Django,来创建API接口供前端调用。以下是一个使用Flask创建API的简单例子:
在已激活的虚拟环境中可以使用如下命令安装 Flask:
/www/wwwroot/Python/myenv/bin/pip3 install Flask
安装好了 Flask,创建一个最小的应用
在\www\wwwroot\python\mypy\文件夹中创造一个web.py文件,源码为
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
那么,这些代码是什么意思呢?
- 首先我们导入了
Flask
类。该类的实例将会成为我们的 WSGI 应用。 - 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。
__name__
是一个适用于大多数情况的快捷方式。有了这个参数, Flask 才能知道在哪里可以找到模板和静态文件等东西。 - 然后我们使用
route()
装饰器来告诉 Flask 触发函 数的 URL 。 - 函数返回需要在用户浏览器中显示的信息。默认的内容类型是 HTML ,因此 字符串中的 HTML 会被浏览器渲染。
把它保存为 hello.py
或其他类似名称。请不要使用 flask.py
作为应用名称,这会与 Flask 本身发生冲突。
可以使用 flask
命令或者 python -m flask
来运行这个应 用。你需要使用 --app
选项告诉 Flask 哪里可以找到应用。
/www/wwwroot/Python/myenv/bin/python3 -m flask --app web run
这样就启动了一个非常简单的内建的服务器。这个服务器用于测试应该是足够 了,但是用于生产可能是不够的。关于部署的有关内容参见 生产部署 。
现在在浏览器中打开 http://127.0.0.1:5000/ ,应该可以看到 Hello World! 字样。
如果其他程序已经占用了 5000 端口,那么在尝试启动服务器时会看到 OSError: [Errno 98]
或者 OSError: [WinError 10013]
, 如何解决这个问题请参阅 地址已被占用 。
外部可见的服务器
运行服务器后,会发现只有您自己的电脑可以使用服务,而网络中的其他电 脑却不行。缺省设置就是这样的,因为在调试模式下该应用的用户可以执行 您电脑中的任意 Python 代码。
如果您关闭了调试器或信任您网络中的用户,那么可以让服务器被公开访问。 只要在命令行上简单的加上 --host=0.0.0.0
即可:(如果直接使用线上测试要用下边代码才能用本地连接服务器,浏览器输入服务器外部ip地址:5000/,宝塔注意要把安全端口打开,否则无法连接后台)
/www/wwwroot/Python/myenv/bin/python3 -m flask --app web run --host=0.0.0.0
这行代码告诉您的操作系统监听所有公开的 IP 。
细心的小伙伴肯定发现代码输入后有一段红字警告:
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
出现这个警告的原因是开发环境中的服务器被用于生产环境,或者在开发环境中运行时框架为了提醒开发者避免误用而发出的警告。
解决思路
解决这个问题的思路包括以下几个步骤:
了解并选择合适的生产服务器:选择合适的生产级服务器(如 Gunicorn、uWSGI、Nginx、Apache 等)。
配置和部署:配置和部署生产服务器,确保其安全性和性能满足生产需求。
优化代码和服务器配置:优化代码和服务器配置以提升应用性能。
解决方法
使用 Gunicorn 部署 Flask 应用
安装 Gunicorn:
/www/wwwroot/Python/myenv/bin/pip3 install gunicorn
启动 Flask 应用:
/www/wwwroot/Python/myenv/bin/python3 -m gunicorn -w 2 -b 0.0.0.0:5000 web:app
其中,-w
2 表示使用 42个工作进程,-b 0.0.0.0:5000
表示绑定到所有网络接口的 5000 端口,web:app
表示应用入口 web是文件名称 app应用名称一般不动就是app
在开发 Web 应用时,开发服务器非常便捷,但它们并不适合生产环境。通过使用生产级服务器(如 Gunicorn、uWSGI、Nginx、Apache 等)来部署应用,可以显著提升应用的性能和安全性。希望本文的介绍和亲测有效的解决方案能帮助开发者高效地解决类似问题,提升项目开发和部署的顺利度。