一、概述
Flask是一个使用Python 编写的开源轻量级Web 应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎,它依赖 Werkzeug WSGI 套件、 Jinja 模板引擎和 Click CLI 套 件。Flask框架可用于构建任何类型的Web应用程序,包括单页面应用程序、企业应用程序、博客、社交媒体应用程序等等。Flask是用python进行web开发,一个常见的python web框架。实际Flask可完全看做是python的一个第三方库。与其他模块一样,安装时可以直接使用python的pip命令实现,目前python2已经不受社区支持,推荐使用Python3部署。
另外了解Flask部署之前,我们需先了解一个协议规范WSGI,它的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI协议主要包括server和application两部分:
1)WSGI server:负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
2)WSGI application:接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
WSGI协议其实是定义了一种server与application解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的server和application组合实现自己的web应用。
资源链接:Flash官方文档、中文转译文档、Gunicorn 文档
二、背景说明
Flask 相关概念:
1.应用程序对象:应用程序对象是Flask应用程序的核心对象。它是一个Flask类的实例。应用程序对象是用于创建Web应用程序的主要接口。
2.上下文:Flask框架中有两种上下文:应用程序上下文和请求上下文。应用程序上下文为应用程序提供了一个全局上下文,而请求上下文则为每个请求提供了一个上下文。
3.路由:路由是Flask应用程序中的URL映射。它指定了URL与视图函数之间的关系。
4.视图函数:视图函数是Flask应用程序中处理请求的函数。它们使用装饰器将路由绑定到函数上。
5.模板:模板是Flask应用程序中用于渲染HTML页面的文件。它们使用Jinja2模板引擎进行渲染。
6.表单:表单是Flask应用程序中用于收集用户输入数据的HTML表单。它们使用WTForms库进行验证和处理。
近期,集团某电量采集项目中,需要部署一个图形解析服务器,但服务器无法连接外网,研发人员开发工作需要构建pypi环境;如果服务器可以连接到外网,可以简单的用 pip install Flask 直接将Flask的依赖包及Flask直接安装好。然而本次项目中只能---->离线安装。另本次显示环境实现web访问,flask部署拟采用:nginx+uWSGI 和nginx+gunicorn,这两种方案,uWSGI和Gunicorn都是实现了WSGI server协议的服务器(把HTTP协议转化成WSGI协议,让Python可直接使用),Flask是实现了WSGI application协议的web框架,经评估后选择后者,nginx主要还是处理静态文件,反向代理,HTTPS/HTTP请求处理,鬓发处理;Gunicorn作为一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,已然成熟,具有使用非常简单,轻量级的资源消耗,以及高性能等特点,现场主要用作wsgi app的容器,启动python应用,与Flask框架交互进行request处理;使用supervisor启停监控wsgi应用。架构类似如下:
三、Python package index(Pypi)环境安装
Flask下载地址:https://github.com/pallets/flask
官方说:flask 依赖两个外部库:Werkzeug 和 Jinja2 。 Werkzeug 是一个 WSGI(在 Web 应用和多种服务器之间的标准 Python 接口) 工具集。Jinja2 负责渲染模板。但是实际安装flask之前,需要先安装其依赖包;可参考一下列表:
1、click-6.7-py2.py3-none-any.whl
2、itsdangerous-0.24.tar.gz
3、markupsafe-1.0.tar.gz
4、werkzeug-0.14.1-py2.py3-none-any.whl
5、jinja2-2.10-py2.py3-none-any.whl
6、flask-1.0.2-py2.py3-none-any.whl
3.1、Flask依赖包下载
Werkzeug>=0.15
Jinja2>=2.10.1, which requires:
MarkupSafe
Babel>=0.8, which requires:
pytz
itsdangerous>=0.24
click>=5.1
注:以上依赖包需要按照顺序进行按照,版本只做参考,你可以使用最新版。