Python 网络编程 (Flask)
Warning
最近没有时间维护对应的项目,等后续有空了会重构内容并开源。
Flask 是使用 Python 作为后端语言的 Web 微框架,旨在帮助开发者快速开发出一个小型网站。本文以一个实际的「搜索中台」小项目为例,展开 Python Flask 的具体介绍。项目开源在:https://github.com/Explorer-Dong/YunJinWeb。
项目简介
整体的服务逻辑:
sequenceDiagram
participant User
participant Nginx
participant uWSGI
participant App as Flask
User->>Nginx: 发送 HTTP 请求
Nginx->>uWSGI: 转发请求
uWSGI->>App: 处理请求
App-->>uWSGI: 返回响应
uWSGI-->>Nginx: 返回响应
Nginx-->>User: 返回 HTTP 响应
Flask 基础
TODO
Flask 部署
配置 MySQL
放通端口。服务器放通 MySQL 的应用端口,默认开启在 3306。
安装 MySQL 并启动。不同的 GNU/Linux 发行版的部署方法不尽相同,详细操作可以参考:
配置 MySQL 服务。
-
在服务器中连接 MySQL
-
重置密码
-
使用数据库
-
允许远程登录数据库
-
刷新更新配置
构造数据库信息。由于数据库相关的资源已经被我存储在了本地 Windows,故直接在本地开发环境中利用 DataGrip 数据库管理工具将相应的信息复制到这台服务器的 MySQL 数据库中即可:
图 1. 本地选择 MySQL 数据库
图 2. 填写服务器信息和应用端口并测试连接
图 3. 拷贝本地资源至远程的数据库
配置 Nginx
放通端口。服务器安全组放通 Nginx 应用端口:80。
下载 Nginx。进入 nginx 官网 并找到以下内容:
图 4. 找到 Nginx 的下载链接
然后通过 wget 命令下载压缩包:
解压:
安装 Nginx。Ubuntu 需要额外 手动安装 Nginx 的依赖库:
启动 Nginx。进入 /usr/local/nginx-1.24.0/sbin/
目录并启动 Nginx:
报错:端口被占用。
解决:使用
killall -9 nginx
杀掉 nginx 的进程,然后重启。
最后浏览器通过 http 协议默认的 80 端口访问公网 ip,就可以看到欢呼雀跃的一幕:
图 5. Nginx 启动成功
配置 Python
安装 Python 软件。参考:linux 安装 python。
配置虚拟环境包。这是必须的,可以避免很多版本依赖问题。
下载虚拟环境管理包:
在 /root/ 目录下进入 .bashrc 文件:
刷新配置文件:
解决
virtualenvwrapper.sh: There was a problem running the initialization hooks.
报错
- 解决方案一:注意上述
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python311
中的路径是否正确- 解决方案二:virtualenvwrapper.sh 报错: There was a problem running the initialization hooks.解决
创建 Python 虚拟环境。一些 virtualenvwrapper 包的基本配置操作:
运行 Flask
拉取仓库代码并初始化环境。进入 python 虚拟环境目录:
使用 Flask 内置服务器运行。该方法只限于开发环境使用,如果需要在生产环境上限服务,请看下一种运行方法。
之后就可以通过「IP 地址 + 端口号」的方式访问服务了。如果遇到端口被占用的问题,可以采用和上述启动 Nginx 遇到端口占用一样的解决方案,找到占用端口对应的进程号,然后终止即可。
使用 uWSGI 应用服务器运行。该方法适用于生产环境,推荐使用。
安装 uWSGI 包:
创建 uwsgi.ini 文件并编辑:
启动 uWSGI 服务器:
终止 / 重启 uWSGI 服务器:
同理,之后可以通过 IP 地址 + 端口号的方式访问服务。如果配置了域名和 Nginx 代理,就可以直接用域名访问对应的服务了。