Flask应用部署

本文记录一次 Flask 应用阿里云ECS部署实践过程,环境为 Ubuntu 16.04 ,工具集 Nginx + Gunicorn + Supervisor + Flask。

Linux 环境准备

因为阿里云安装的 Ubuntu 系统默认带 python 环境,所以只需要安装 python 虚拟环境 virtualenv 包

1
pip install virtualenv

然后安装 nignx:

1
sudo apt-get install nginx

查看更多

flask 源码解析:session

session 简介

在解析 session 的实现之前,我们先介绍一下 session 怎么使用。session 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。比如购物网站在用户点击进入购物车的时候,服务器需要知道是哪个用户执行了这个操作。

在 flask 中使用 session 也很简单,只要使用 from flask import session 导入这个变量,在代码中就能直接通过读写它和 session 交互。

查看更多

flask 源码解析:响应

response 简介

在 flask 应用中,我们只需要编写 view 函数,并不需要直接和响应(response)打交道,flask 会自动生成响应返回给客户端。

The return value from a view function is automatically converted into a response object for you. —— Flask docs

我们知道 HTTP 响应分为三个部分: 状态栏(HTTP 版本、状态码和说明)、头部(以冒号隔开的字符对,用于各种控制和协商)、body(服务端返回的数据)。比如下面访问博客首页的响应:

查看更多

flask 源码解析:请求

简介

对于物理链路来说,请求只是不同电压信号,它根本不知道也不需要知道请求格式和内容到底是怎样的; 对于 TCP 层来说,请求就是传输的数据(二进制的数据流),它只要发送给对应的应用程序就行了; 对于 HTTP 层的服务器来说,请求必须是符合 HTTP 协议的内容; 对于 WSGI server 来说,请求又变成了文件流,它要读取其中的内容,把 HTTP 请求包含的各种信息保存到一个字典中,调用 WSGI app; 对于 flask app 来说,请求就是一个对象,当需要某些信息的时候,只需要读取该对象的属性或者方法就行了。

可以看到,虽然是同样的请求数据,在不同的阶段和不同组件看来,是完全不同的形式。因为每个组件都有它本身的目的和功能,这和生活中的事情一个道理:对于同样的事情,不同的人或者同一个人不同人生阶段的理解是不一样的。

查看更多

flask 源码解析:上下文

上下文(application context 和 request context)

上下文一直是计算机中难理解的概念,在知乎的一个问题下面有个很通俗易懂的回答:

每一段程序都有很多外部变量。只有像Add这种简单的函数才是没有外部变量的。一旦你的一段程序有了外部变量,这段程序就不完整,不能独立运行。你为了使他们运行,就要给所有的外部变量一个一个写一些值进去。这些值的集合就叫上下文。 – vzch

比如,在 flask 中,视图函数需要知道它执行情况的请求信息(请求的 url,参数,方法等)以及应用信息(应用中初始化的数据库等),才能够正确运行。

最直观地做法是把这些信息封装成一个对象,作为参数传递给视图函数。但是这样的话,所有的视图函数都需要添加对应的参数,即使该函数内部并没有使用到它。

查看更多

flask 源码解析:路由

构建路由规则

一个 web 应用不同的路径会有不同的处理函数,路由就是根据请求的 URL 找到对应处理函数的过程

在执行查找之前,需要有一个规则列表,它存储了 url 和处理函数的对应关系。最容易想到的解决方案就是定义一个字典,key 是 url,value 是对应的处理函数。如果 url 都是静态的(url 路径都是实现确定的,没有变量和正则匹配),那么路由的过程就是从字典中通过 url 这个 key ,找到并返回对应的 value;如果没有找到,就报 404 错误。而对于动态路由,还需要更复杂的匹配逻辑。flask 中的路由过程是这样的吗?这篇文章就来分析分析。

查看更多

flask 源码解析:应用启动流程

WSGI

所有的 python web 框架都要遵循 WSGI 协议,如果对 WSGI 不清楚,可以查看我之前的介绍文章

在这里还是要简单回顾一下 WSGI 的核心概念。

WSGI 中有一个非常重要的概念:每个 python web 应用都是一个可调用(callable)的对象。在 flask 中,这个对象就是 app = Flask(__name__) 创建出来的 app,就是下图中的绿色 Application 部分。要运行 web 应用,必须有 web server,比如我们熟悉的 apache、nginx ,或者 python 中的 gunicorn ,我们下面要讲到的 werkzeug 提供的 WSGIServer,它们是下图的黄色 Server 部分。

查看更多

Flask源码解析:简介

Flask 简介

Flask 官网上对它的定位是一个“微” python web 开发框架。

Flask is a micro web development framework for Python.

python 语言 web 框架很多:Django、Tornado、webpy、bottle……,flask 的特点是简单可扩展。简单有几个方面,比如它只实现 web 框架最核心的功能,保持功能的简洁;还有一个就是代码量少,核心代码 app.py 文件只有 2k+ 行。可扩展就是允许第三方插件来扩充功能,比如数据库可以使用 Flask-SQLAlchemy,缓存可以使用 Flask-Cache 等等。

查看更多

iOS设备MDM开发流程证书相关

申请Vendor

申请成为MDM Vendor

  1. 首先需要拥有一个 iOS Developer Enterprise Program 帐号;
  2. 申请成为MDM Vendor,iOS企业开发帐号默认不支持MDM功能,需要向苹果申请才能开通,访问 https://developer.apple.com/contact/submit.php,并通过iOS企业开发帐号Agent身份登录,提交申请说明希望成为MDM Vendor,苹果一般在一个工作日内会处理完毕,处理完后会给Agent发邮件通知,此时再次登录到开发中心Add iOS Certificate界面或多处一个“MDM SCR”选项。

查看更多