
2.2 Web框架
Python语言具有开源和跨平台的特点,在设计开发Web应用程序方面具有很大的优势,Python强大的模块以及广泛的实际应用使其成为Web开发的典型选择。Python具有丰富的Web开发框架,如Django和Flask,可以快速完成一个网站的开发和Web服务。国内的豆瓣、果壳网及国外的Google、Dropbox等都是使用Python开发的。
2.2.1 主流Web框架
Python常用的主流Web框架包括Django、Flask、Pyramid、Bottle、Web2py、Tornado、Aiohttp、Scrapy等,下面介绍这些主流Web框架。
1.Django
Django是最流行的一款Web框架,具有实用的设计和快速开发的效率,纯免费、开源。其设计是为了帮助开发人员尽快完成从概念转换为应用程序。它能自动生成数据库结构以及全功能的管理后台,因此安全性非常好,能够帮助开发人员避免许多常见的安全错误。
2.Flask
Flask是一款使用Python编写的轻量级Web应用框架,Flask使用BSD授权。Flask也被称为微型框架,因为它使用简单的核心,可扩展增加其他功能,使用Flask的扩增功能可实现ORM(Object Relational Mapping)、窗体验证工具、文件上传、各种开放式身份验证技术等。
3.Pyramid
Pyramid和Django都面向大的应用,Pyramid比较灵活,注重于让开发人员去选择,可以选择数据库、各种模板、项目结构等,而Django的目标是提供一站式的解决方案。
4.Bottle
Bottle是一款快速小巧、轻量级的微型Web框架,是遵循WSGI(Web Server Gateway Interface)的简单高效的微型Python Web框架。除Python标准库外,它不依赖于任何第三方模块。
5.Web2py
Web2py是一款全栈式的Web框架,是为Python语言提供的全功能Web应用框架,旨在快速开发Web应用,具有快速、安全以及可移植等特性,兼容Google App Engine。
6.Tornado
Tornado是一款Python的Web框架和异步网络库,使用了非阻塞的网络I/O,而且速度相当快。
7.Aiohttp
Aiohttp是基于Asyncio实现的Http框架,实现了单线程并发IO操作以及TCP、UDP、SSL等协议。
8.Scrapy
Scrapy是一款使用Python编写的轻量级简单轻巧的爬虫框架,使用起来非常方便。
9.Cubes
Cubes是一款轻量级Python框架,包含OLAP(Online Analytical Processing)、多维数据分析和浏览聚合数据(Aggregated Data)等工具。
10.Falcon
Falcon是一款构建云API和网络应用后端的高性能Python框架。
11.Buildbot
Buildbot是一款开源框架,基于Python的持续集成测试框架,可以自动化软件构建、测试和发布等过程。
2.2.2 Django框架
Python下有许多款不同的Web框架,Django应该是最出名的框架之一,许多知名网站和APP都基于Django。Django主页:https://www.djangoproject.com/,如图2-12所示。

图2-12 Django主页
Django项目的Github地址:https://github.com/django/django,其是由世界各地的贡献者来开发的一个开源项目。
Django具有以下特点。
(1)支持对象关系映射(ORM)。Django提供数据模型和数据库引擎之间的桥梁,并支持多种数据库系统,例如MySQL、Oracle、Postgres等。在Django中还可通过Django-nonrel支持NoSQL数据库。
(2)多种语言支持。Django通过其内置的国际化系统支持多语种应用。
(3)框架支持。Django内置了对Ajax、RSS和其他各种框架的支持。
(4)GUI管理。Django提供了一个很好的用户界面用于管理活动。
(5)方便开发。Django自带了一个轻量级的Web服务器,方便Web应用的开发和测试。
Django主流的版本为2.1.7,支持Python 3.x版本,安装命令为“pip install Django==2.1.7”,如图2-13所示。

图2-13 Django安装
安装Django后的目录如图2-14所示。

图2-14 Django目录
安装Django之后,即拥有了可用的管理工具“django-admin.py”,如图2-15所示。

图2-15 管理工具“django-admin.py”
可以使用“django-admin.py”创建一个项目,例如创建项目HelloWorld,命令为“django-admin startproject HelloWorld”,创建项目后的目录结构如图2-16所示。

图2-16 创建Django项目
项目中的文件说明如下。
(1)manage.py:一个实用的命令工具,Django程序执行的入口。
(2)HelloWorld/__init__.py:一个空文件,表示该目录是一个Python包。
(3)HelloWorld/settings.py:该Django项目的总设置/配置文件。
(4)HelloWorld/urls.py:Django项目默认的路由配置文件。
(5)HelloWorld/wsgi.py:WSGI兼容的Web服务器的入口,以便运行项目。
切换到HelloWorld目录,输入命令“python manage.py runserver 0.0.0.0:8000”,启动服务器,“0.0.0.0”表示其他计算机可连接到开发服务器,8000为端口号。在浏览器中输入服务器的1P及端口号,如图2-17所示。

图2-17 Django项目
“manage.py”是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过Python命令执行。“manage.py”接受的是Django提供的内置命令。
Django执行命令可以使用以下两种方式。
(1)django-admin <command>[options]
(2)python manage.py <command>[options]
其中<command>为Django提供的内置命令,包括check、dbshell、diffsettings、flush、makemigrations、migrate、runserver、shell、startapp、startproject、test。
上面列出的是Django核心提供的命令项,下面这些内置命令只在对应的APP启用时才可用:changepassword、createsuperuser、clearsessions、collectstatic。
在Django项目创建完成以后,执行下列命令,可以为项目生成数据表、用户名和密码,如图2-18所示。

图2-18 为项目生成数据表、用户名和密码

重新启动服务器命令为“python manage.py runserver 0.0.0.0:8000”,在浏览器中输入“127.0.0.1:8000/admin”,使用刚才创建的用户名和密码登录,如图2-19所示。
在Django项目中执行命令“python manage.py startapp app_demo”,创建一个应用程序,如图2-20所示。

图2-19 Django项目的后台管理界面

图2-20 创建应用程序
应用程序中文件和文件夹的说明如下。
(1)admin.py:配置和管理站点的文件。
(2)apps.py:应用信息配置文件,其中的类Appconfig用于定义应用名等数据。
(3)migrations:数据库迁移生成的脚本。
(4)models.py:数据库模型的文件。
(5)views.py:视图控制器的文件。
(6)test.py:测试脚本的文件。
Django项目创建应用程序后,使用过程如图2-21所示。

图2-21 应用程序使用过程
具体描述如下。
(1)创建Django应用程序后,需要在项目的同名文件夹中的“settings.py”文件中注册,如图2-22所示。

图2-22 “settings.py”文件中注册应用程序
(2)在项目的“urls.py”文件中包含app_demo的url模式,如图2-23所示。

图2-23 配置项目的“urls.py”文件
(3)项目的“urls.py”文件配置视图的函数和对应的URL绑定,如图2-24所示。

图2-24 配置应用程序的“urls.py”文件
(4)在视图文件“views.py”中填入如下内容,如图2-25所示。

图2-25 “views.py”中填入内容
(5)运行应用程序,启动服务器。运行命令“python manage.py runserver”,在浏览器中输入“http://127.0.0.1:8000/app_demo/index/”,如图2-26所示。

图2-26 运行应用程序
2.2.3 Flask框架
Flask是一款使用Python编写的轻量级Web应用框架,其依赖两个模块:Werkzeug和Jinja2。Werkzeug是一个WSGI(Web Server Gateway Interface,WSGI是一个规范,定义Web服务器如何与Python应用程序进行交互)的工具集,Jinja2负责渲染模板。Flask主页:http://flask.pocoo.org/,如图2-27所示。

图2-27 Flask的主页
Flask的安装命令:pip install flask,如图2-28所示。

图2-28 Flask安装
安装完成以后,可以使用命令pip list查看所有安装包,如图2-29所示。

图2-29 查看所有安装包
在Python IDLE中输入下列代码,保存文件名为“Flask_Demo1.py”。

在Windows的命令控制台输入以下命令以启动运行,如图2-30所示。

图2-30 启动运行

在浏览器中输入网址“http://127.0.0.1:5000/”,结果如图2-31所示。

图2-31 浏览器运行
为了使URL可变,可以把这些特殊的字段标记为<variable_name>,这样会传递一个关键字变量到定义的方法中。转换器规则<converter:variable_name>的实例代码如下。

在Python IDLE中保存文件名为“Flask_Demo2.py”,启动代码,在浏览器中运行结果如图2-32所示。

图2-32 可变URL浏览器的运行结果
Http访问URL的方法有所不同。默认情况下,一个路由只能回复GET请求,但可以通过为route()修饰符提供methods参数来改变这一点,实例代码如下。

使用Python生成HTML表单是很麻烦的事,Flask推出了Jinja2模板引擎来完成这项任务。可以使用render_template()方法渲染一个模板,需要做的仅仅是提供模板的名称和想要传递给模板引擎的关键字变量,实例代码如下。

Flask会在项目的templates子目录下查找模板。