首页 > 技术文章 > 基于flask的轻量级webapi开发入门-从搭建到部署

ihappycat 2019-02-13 10:19 原文

基于flask的轻量级webapi开发入门-从搭建到部署

注:本文的代码开发工作均是在python3.7环境下完成的。
关键词:python flask tornado webapi

在python虚拟环境中开发flask应用

参考:
Python3虚拟环境 venv搭建轻量级虚拟环境
关于Python3中venv虚拟环境
Flask框架web开发:零基础入门
如何在某.py文件中调用其他.py内的函数
Flask 路由
Flask解决跨域的问题

python3.3以上的环境中直接提供了venv模块创建虚拟环境,该模块代替了原virtualenv,建议直接使用python3最新版本。

虚拟环境创建示例

创建一个名为flask的虚拟环境,系统会创建一个flask文件夹,文件夹中包含了该版本python的依赖环境,里面有三个include,Lib,Scripts三个子文件夹。

 python -m venv flask 

进入Scripts文件夹,运行activate.bat激活虚拟环境(deactivate.bat关闭虚拟环境,ps环境中运行Activate.ps1激活)

 activate.bat 

激活虚拟环境后,可通过pip安装flask模块

 pip install flask 

在flask文件夹同级下,建立APP文件夹,在APP文件夹内新建 run.py 文件,创建一个Hello Word的flask服务,完整代码如下:

from flask import Flask # 引用flask库
app= Flask(__name__)

# 定义路由
@app.route('/')  
def hello_world():
    return 'Hello,World!'

if __name__=="__main__":
    app.run(debug=True,port=8080) # 开启调试模式,程序访问端口为8080

运行 run.py

 python run.py

在浏览器中访问:http://127.0.0.1:8080/ ,成功后返回 Hello,World!

利用tornado和nginx将程序部署在生产环境服务器上

参考:
将Flask应用程序部署在nginx,tornado的简单方法
windowsServer环境下的flask+nginx部署方案
Windows 下Flask Nginx Tornado 协同工作的简单例子

安装 tornado

pip install tornado

在 run.py 同级目录下创建 tornado_server.py 文件,作用是托管app.py。同时将 app.py 中的端口号去掉,在 tornado_server.py 中定义访问端口号。 tornado_server.py 代码如下:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from run import app # 这里和run.py对应

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)  #flask默认的端口
IOLoop.instance().start()

运行 tornado_server.py

python.exe tornado_server.py

配置nginx

如果之前启动了nginx,在cmd中批量杀死所有nginx进程

taskkill   /fi   "imagename  eq   nginx"  /f

配置nginx中的反向代理,使其指向tornado_server.py中的地址和端口

server {
        listen       80;#端口
        server_name  123.123.123.123;#公网的ip地址,也可以是你没有加www的网址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location /test {
        #    root   C:\python\workspace;
        #    index  test.html;
        #}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        location / {
            proxy_pass   http://localhost:5000;#所有访问80端口的,都会转到5000端口
        }

启动 nginx ,访问ngix提供的80端口

start nginx

python 虚拟环境迁移

方法有几种,生成环境服务器可以连接互联网的情况下,推荐使用requirements.txt方式

  • 激活开发虚拟环境,执行命令,将包依赖信息保存在requirements.txt文件中
pip freeze > requirements.txt
  • 在生产环境服务器建立虚拟环境,利用requirements.txt文件还原依赖包
pip install -r requirements.txt

生产服务器中的虚拟环境如果是开发环境的拷贝,最好先pip uninstall -ry requirements.txt,再pip install -r requirements.txt

利用nssm将python程序封装成windows服务

参考:
使用nssm部署windows服务启动应用
定时启动多个cmd的python程序,并且批处理关闭各个程序,一键启动conda虚拟环境和运行多个python

将python脚本文件封装成bat文件,如 run.bat

E:\develop\py3fcapi\flask\Scripts\activate.bat && python E:\develop\py3fcapi\app\tornado_server.py

利用nssm将bat文件封装为windows服务,可以在生产环境中更好的运行。nssm安装配置见参考文档

推荐阅读