Python Flask Web框架教程 1 Hellow, World!

原文

Installing Python

如果你的计算机上没有安装Python,请立即安装。如果你的操作系统没有为你提供Python包,你可以从Python官方网站下载安装程序。如果你将Microsoft Windows与WSL或Cygwin一起使用,请注意,你将不会使用Windows本机版本的Python,而是需要从Ubuntu(如果您使用WSL)或Cygwin获得的Unix友好版本。
为了确保Python安装的功能正常,可以打开一个终端窗口并键入python3,如果这样做不起作用,就键入python。以下是你应该看到的内容:

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> _

Python解释器现在正等待一个交互式提示,你可以在这里输入Python语句。在以后的章节中,你将了解这个交互式提示对于什么样的事情是有用的。但是现在,你已经确认Python已经安装在你的系统上。要退出交互式提示,可以键入exit()并按Enter键。在Linux和Mac OS X版本的Python上,还可以按Ctrl-D退出解释器。在Windows上,退出快捷方式是Ctrl-Z,然后按Enter。

Installing Flask

下一步是安装Flask,但在此之前,我想告诉你与安装Python包相关的最佳实践。
在Python中,诸如Flask之类的包可以在公共存储库中使用,任何人都可以从那里下载并安装它们。官方的Python包存储库称为PyPI,它代表Python包索引(有些人还将此存储库称为“cheese shop”)。从PyPI安装软件包非常简单,因为Python附带了一个名为pip的工具来完成这项工作(在python2.7中,pip没有与Python捆绑在一起,需要单独安装)。
要在计算机上安装软件包,请按如下方式使用pip

$ pip install <package-name>

有趣的是,这种安装软件包的方法在大多数情况下都不起作用。如果你的Python解释器是为你的计算机的所有用户全局安装的,那么你的常规用户帐户很可能没有对其进行修改的权限,因此使上述命令起作用的唯一方法是从管理员帐户运行它。但是,即使没有这种复杂的情况,也要考虑一下当你安装如上所述的包时会发生什么。pip工具将从PyPI下载包,然后将其添加到Python安装中。从那时起,系统上的每个Python脚本都可以访问这个包。想象一下这样一种情况:你已经使用Flask的0.11版本完成了一个web应用程序,它是你启动时Flask的最新版本,但现在已经被0.12版本取代了。你现在想要启动第二个应用程序,你希望使用0.12版本,但是如果替换已安装的0.11版本,则可能会破坏旧的应用程序。你看到问题了吗?如果可以安装Flask0.11供旧应用程序使用,也可以安装Flask0.12供新应用程序使用,这将是理想的。
为了解决为不同的应用程序维护不同版本的包的问题,Python使用了虚拟环境的概念。虚拟环境是Python解释器的完整副本。在虚拟环境中安装软件包时,系统范围内的Python解释器不受影响,只有副本受影响。因此,要完全自由地为每个应用程序安装任何版本的软件包,解决方案是为每个应用程序使用不同的虚拟环境。虚拟环境还有一个额外的好处,即它们由创建它们的用户拥有,因此它们不需要管理员帐户。
我们先创建一个项目所在的目录。我将把这个目录称为microblog,因为这是应用程序的名称:

$ mkdir microblog
$ cd microblog

如果你使用的是Python 3版本,则其中包含虚拟环境支持,因此创建一个版本所需做的就是:

$ python3 -m venv venv

通过这个命令,我要求Python运行venv包,它创建了一个名为venv的虚拟环境。命令中的第一个venv是Python虚拟环境包的名称,第二个是我将用于此特定环境的虚拟环境名称。如果你发现这让人困惑,可以用另一个要分配给虚拟环境的名称替换第二个venv。一般来说,我在项目目录中创建了名为venv的虚拟环境,因此每当我用cd进入项目时,我都会找到相应的虚拟环境。
注意,在某些操作系统中,你可能需要在上面的命令中使用python而不是python3。有些安装使用python2.x版本的python和3.x版本的python3,而有些安装则将python映射到3.x版本。
命令完成后,你将拥有一个名为venv的目录,其中存储虚拟环境文件。
如果你使用的是任何早于3.4的Python版本(包括2.7版本),则不支持虚拟环境。对于那些版本的Python,您需要下载并安装一个名为virtualenv的第三方工具,然后才能创建虚拟环境。安装virtualenv后,可以使用以下命令创建虚拟环境:

virtualenv venv

无论你使用何种方法创建虚拟环境,都应该创建虚拟环境。现在你必须告诉系统你想使用它,然后激活它。要激活全新的虚拟环境,请使用以下命令:

$ source venv/bin/activate
(venv) $ _

如果使用的是Microsoft Windows命令提示符窗口,则激活命令略有不同:

$ venv\Scripts\activate
(venv) $ _

当你激活一个虚拟环境时,终端会话的配置会被修改,这样存储在其中的Python解释器就是您键入Python时调用的解释器。此外,终端提示也被修改为包含激活的虚拟环境的名称。对终端会话所做的更改都是临时的,并且是该会话的专用更改,因此当你关闭终端窗口时,这些更改不会持久存在。如果你同时打开多个终端窗口,那么在每个窗口上激活不同的虚拟环境是非常好的。
现在你已经创建并激活了虚拟环境,最后可以在其中安装Flask:

(venv) $ pip install flask

如果要确认你的虚拟环境现在已经安装了Flask,可以启动Python解释器并将Flask导入(import)其中:

>>> import flask
>>> _

如果这句话没有给你任何错误,你可以祝贺自己,因为Flask已安装并准备好使用。

A “Hello, World” Flask Application

如果你去Flask网站,你会得到一个非常简单的示例应用程序,它只有五行代码。不再重复这个简单的例子,我将向你展示一个稍微复杂一点的例子,它将为你提供一个编写更大应用程序的良好基础结构。
应用程序将存在于包中。在Python中,包含一个__init__.py文件的子目录被认为是一个包,可以导入。导入包时,__init__.py将执行并定义包向外部世界公开的符号。
让我们创建一个名为app的包,它将承载应用程序。确保你在microblog目录中,然后运行以下命令:

(venv) $ mkdir app

app包的__init__.py将包含以下代码:

#app/__init__.py: Flask application instance

from flask import Flask

app = Flask(__name__)

from app import routes

上面的脚本只是将应用程序对象创建为从flask包导入的Flask类的实例。传递给Flask类的__name__变量是Python预定义变量,该变量设置为使用它的模块的名称。 Flask需要加载相关资源(例如模板文件)时,会以此处传递的模块的位置为起点,这将在第2章中介绍。出于所有实际目的,传递__name__几乎总是会以正确的方式配置Flask道路。然后,应用程序将导入路由(routes)模块,该模块尚不存在。

一开始似乎令人困惑的方面是,有两个名为app的实体。该应用程序包由app目录和__init__.py脚本定义,并在from app import route语句中引用。 app变量在__init__.py脚本中定义为Flask类的实例,这使其成为app包的成员。

另一个特殊之处是,路由(routes)模块是始终在脚本的底部而不是顶部导入的。底部导入是循环导入的一种解决方法,而循环导入是Flask应用程序的常见问题。你将看到route模块需要导入此脚本中定义的app变量,因此,将其中一个相互导入放在底部可以避免由于这两个文件之间的相互引用而导致的错误。

那么,routes模块中有什么?路由是应用程序实现的不同URL。在Flask中,应用程序路由的处理程序被编写为Python函数(称为视图函数)。视图函数被映射到一个或多个路由URL,以便Flask知道当客户端请求给定URL时要执行的逻辑。

这是你的第一个视图函数,你需要在名为app/routes.py的新模块中编写该函数:

#app/routes.py: Home page route

from app import app

@app.route('/')
@app.route('/index')
def index():
    return "Hello, World!"

这个视图函数实际上非常简单,它只是以字符串形式返回问候语。函数上方的两条奇怪的@app.route行是装饰器,这是Python语言的独特功能。装饰器修改其后的功能。装饰器的常见模式是使用它们将函数注册为某些事件的回调。在这种情况下,@app.route装饰器会在作为参数提供的URL与函数之间创建关联。在此示例中,有两个装饰器,它们将URL //index与此函数相关联。这意味着,当Web浏览器请求这两个URL中的任意一个时,Flask将调用此函数并将其返回值作为响应传递回浏览器。

要完成该应用程序,你需要在顶层定义一个Flask应用程序实例的Python脚本。让我们将此脚本称为microblog.py,并将其定义为导入应用程序实例的一行:

#microblog.py: Main application module

from app import app

还记得这两个app实体吗? 在这里,你可以在同一句子中同时看到这两者。 Flask应用程序实例称为app,并且是app包的成员。 from app import app语句导入作为app包成员的app变量。 如果你感到困惑,则可以将包或变量重命名为其他名称。

为了确保你正确执行所有操作,下面你可以看到到目前为止的项目结构图:

microblog/
  venv/
  app/
    __init__.py
    routes.py
  microblog.py

信不信由你,该应用程序的第一个版本现已完成! 但是,在运行它之前,需要通过设置FLASK_APP环境变量来告诉Flask如何导入它:

(venv) $ export FLASK_APP=microblog.py

如果你使用的是Microsoft Windows,请在上面的命令中使用set代替export

你准备好被吹走了吗? 你可以使用以下命令运行第一个Web应用程序:

(venv) $ flask run
 * Serving Flask app "microblog"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

服务器初始化后,它将等待客户端连接。 flask run的输出表明服务器正在IP地址127.0.0.1上运行,该地址始终是你自己计算机的地址。 该地址非常普遍,因此也具有一个你以前可能会看到的更简单的名称:localhost。 web服务器在特定端口号上侦听连接。 生产Web服务器上部署的应用程序通常在端口443上侦听,如果未实现加密,则有时在80上侦听,但是访问这些端口需要管理权限。 由于此应用程序在开发环境中运行,因此Flask使用免费的端口5000。现在打开您的Web浏览器,并在地址字段中输入以下URL:

http://localhost:5000/

或者,你可以使用以下其他URL:

http://localhost:5000/index

你是否看到了应用程序路由映射的实际作用? 第一个URL映射到 /,第二个URL映射到 /index。 这两个路由都与应用程序中唯一的视图函数相关联,因此它们会产生相同的输出,即该函数返回的字符串。 如果输入任何其他URL,则将收到错误消息,因为应用程序仅识别这两个URL。

完成服务器的演示后,你可以按Ctrl-C停止它。

恭喜,你已经完成了成为Web开发人员的第一步!

在结束本章之前,我想再提一件事。 由于在终端会话之间不会记住环境变量,因此打开新的终端窗口时,总是必须设置FLASK_APP环境变量很麻烦。 从1.0版开始,Flask允许你注册要在运行flask命令时自动导入的环境变量。 要使用此选项,您必须安装python-dotenv软件包:

(venv) $ pip install python-dotenv

然后,你可以将环境变量的名称和值写入项目顶层目录中的.flaskenv文件中:

#.flaskenv: Environment variables for flask command

FLASK_APP=microblog.py

这样做是可选的。如果你喜欢手动设置环境变量,只要你始终记得这样做,这是非常好的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值