TED#1:The Modern Python App

Big Ideas and Little Code

本文主要围绕Web开发, 简述了python 在web 开发过程中会用到的主流技术栈,和如何快速、优雅的启动一个现代化的Python Web工程,适合有一定 Web 开发经验的同学快速了解 Python 技术栈。

目录

构建

配置

开发

部署

监控

常用类库

构建

脚手架:cookiecutter

cookiecutter (https://github.com/audreyr/cookiecutter) 是一个命令行工具,可以通过工程模板生成一个工程骨架。

1.安装cookiecutter

2.使用cookiecutter 生成一个工程。

上述命令 生成了一个 Flask web 工程。

其他模板可在其项目主页查找。https://github.com/audreyr/cookiecutter#a-pantry-full-of-cookiecutters

脚手架: Django

「Django」作为一个成熟的Web框架,自身集成了脚手架命令。

安装Django

新建工程

上述命令生成了如下项目骨架

新建App,App的概念类似于模块,可使用命令快速创建独立的模块,使业务逻辑清晰,减少不同模块之间的耦合。

会生成如下 App 骨架

启动服务

配置

环境

开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被安装到Python3的目录下。

如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要requests 1.0,而应用B需要requests 2.0怎么办?

这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

推荐的做法是每个应用单独创建一套虚拟环境

1.安装virtualenv 库

2.在工程目录下创建虚拟环境

命令就可以创建一个独立的Python运行环境,我们还加上了参数,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个没有安装第三方库的Python运行环境。

新建的python环境 会被放到当前目录下的venv目录,通过命令可以激活该环境

命令行前面 会带 (venv) 字样 标识当前在此python环境下

在环境下,用安装的包都被安装到这个环境下,系统Python环境不受任何影响。

退出当前的环境,使用命令:

依赖

在查看别人的Python项目时,经常会看到一个文件,里面记录了当前程序的所有依赖包及其精确版本号。这个文件有点类似 Rails的或javascript的 或 java中的 文件,其作用是记录该应用所需要依赖的库的信息,使应用在各个环境部署的时候依赖一致

requirements.txt可以通过命令自动生成和安装

生成requirements.txt文件

安装requirements.txt依赖

开发

路由

多数web 框架都使用了Python的 特性,对路由作了支持

ORM

定义模型,区别与java 中model 的概念,python中的model包含了数据库中存储的原信息。

常用的ORM框架,如 Django Model 、SQLachemy,都提供了优雅的API来实现CRUD操作,甚至1:n , n:n 的关联关系。

观其设计思想,可以看出,表中的一行记录可以看为一个对象,而子表的记录,被当做了主表对象的属性,由此在做Model 设计 还是做SQL 查询时, 不会被复杂的关联关系绕晕。

Migrations

Migrations 是一种自动同步物理表与Model的自动化操作,比如当定义好Model ,自动帮你创建表,当增加字段,自动添加等等。

在数据库模型升级、数据库迁移过程中,减少了人为因素的干扰,使系统能持续集成,并且各个环境数据库保持一致。

两个命令和

执行完 会在工程目录中记录此次更新所有关于model 的改动,这个改动还没有作用到数据库文件,数据库没有增加新的表。

执行 会将更新应用到数据库中,并记录此次操作 。

在实际开发过程中,会将 migrations 的记录文件 提交到版本库,让所有开发所环境的数据库版本保持一致。

视图

Django 或 Jinjia 库都提供对HTML模板的处理,方便渲染动态页面。

部署

使用setup.py

执行命令安装包到系统环境中 , 当然还可以通过setuptool 提供的其他命令,将包发布到pypi 仓库上。

监控

Supervisor

Supervisor 是基于 Python 的进程管理工具,可以帮助我们更简单的启动、重启和停止服务器上的后台进程。

当执行一些需要以守护进程方式启动的程序可以监控、管理任务的运行。比如一个后台任务、一组 Web 服务的进程,日志数据的处理分析服务等等

Supervisor 是通用的进程管理工具,可以用来启动任意进程,不仅仅是用来管理 Python 进程。

Supervisor 经常被用来管理由 gunicorn 启动的 Django 或 Flask 等 Web 服务的进程。

除此之外,Supervisor 还能很友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中,还能按文件大小对日志进行分割。

目前 Supervisor 只能运行在 Unix-Like 的系统上,无法运行在 Windows 上。而且还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k。

Supervisor 有两个主要的组成部分:

,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。

,是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。

常用类库

定时任务: Apscheduler

类似 Java 社区的 quartz

分布式任务队列

celery

下面是一个最简单的实现

网络库: requests

参考资料:

[Django] https://docs.djangoproject.com/en/2.1/intro/

[Celery]http://python.jobbole.com/87238/

[Python资源大全] https://github.com/jobbole/awesome-python-cn

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181020G10OAT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券