python3
(如果不存在这个命令,那就输入python
)。预期的输出如下:exit()
并回车来退出交互式解释器。在Linux和Mac OS X操作系统上,按下快捷键Ctrl-D也可以快速退出交互式解释器。在Windows操作系统上,则是通过按下Ctrl-Z后跟上Enter快捷键来快速退出。pip
的工具来解决这个问题(Python2.7中不含pip
工具,需要单独安装)。pip
命令如下:pip
工具从PyPI上下载三方包并安装到全局Python目录下,即刻起,所有Python脚本都可以访问到这个三方包。想象这样一个场景,你之前用当时的最新版本Flask——0.11版本的Flask开发了一个Web应用,现在Flask已经更新到了0.12版本,你想要使用0.12版本的Flask开发第二个Web应用。但是,如果将Flask从0.11版本升级到0.12版本可能会导致第一个Web应用出现故障。解决这个问题的方法最好不过为旧Web应用安装和使用Flask0.11版本,为新Web应用安装和使用Flask0.12版本。译者注:这个命令不一定能够执行成功,比如译者在Ubuntu16.04环境下执行,提示需要先安装对应的依赖。sudo apt-get install python3-venv
venv
包,它会创建一个名为venv
的虚拟环境。 命令中的第一个“venv”是Python虚拟环境包的名称,第二个是要用于这个特定环境的虚拟环境名称。 如果你觉得这样很混乱,可以用你自定义的虚拟环境名字替换第二个venv
。我习惯在项目目录中创建了名为venv
的虚拟环境,所以无论何时cd
到一个项目中,都会找到相应的虚拟环境。python
而不是python3
。 一些安装规范对Python 2.x版本使用python
,对3.x版本使用python3
,而另一些则将python
映射到3.x版本。venv
的目录来存储这个虚拟环境的相关文件。python
的时候,实际上是调用的虚拟环境中的Python解释器。 此外,终端提示符也被修改成包含被激活的虚拟环境的名称的格式。这种激活是临时的和私有的,因此在关闭终端窗口时它们将不会保留,也不会影响其他的会话。 那么,当你需要同时打开多个终端窗口来调试不同的应用时,每个终端窗口都可以激活不同的虚拟环境而不会相互影响。__init__.py
文件的子目录被视为一个可导入的包。 当你导入一个包时,__init__.py
会执行并定义这个包暴露给外界的属性。app
的包来存放整个应用吧。记得切换到microblog目录下,并执行如下命令:__init__.py
,输入如下的代码:Flask
,并以此类创建了一个应用程序对象。 传递给Flask
类的__name__
变量是一个Python预定义的变量,它表示当前调用它的模块的名字。当需要加载相关的资源,如我将在第二章讲到的模板文件,Flask就使用这个位置作为起点来计算绝对路径。 代码的最后,应用程序导入尚未存在的routes
模块。app
。 app
包由app目录和__init__.py
脚本来定义构成,并在from app import routes
语句中被引用。 app
变量被定义为__init__.py
脚本中的Flask
类的一个实例,以至于它成为app
包的属性。routes
模块是在底部导入的,而不是在脚本的顶部。 最下面的导入是解决循环导入的问题,这是Flask应用程序的常见问题。 你将会看到routes
模块需要导入在这个脚本中定义的app
变量,因此将routes
的导入放在底部可以避免由于这两个文件之间的相互引用而导致的错误。routes
模块中有些什么? 路由是应用程序实现的不同URL。 在Flask中,应用程序路由的处理逻辑被编写为Python函数,称为视图函数。 视图函数被映射到一个或多个路由URL,以便Flask知道当客户端请求给定的URL时执行什么逻辑。@app.route
行是装饰器,这是Python语言的一个独特功能。 装饰器会修改跟在其后的函数。 装饰器的常见模式是使用它们将函数注册为某些事件的回调函数。 在这种情况下,@app.route
修饰器在作为参数给出的URL和函数之间创建一个关联。 在这个例子中,有两个装饰器,它们将URL /
和/index
索引关联到这个函数。 这意味着,当Web浏览器请求这两个URL中的任何一个时,Flask将调用该函数并将其返回值作为响应传递回浏览器。这样做是为了在运行这个应用程序的时候会稍微有一点点意义。app
实体吗? 在这里,你可以在同一句话中看到两者。 Flask应用程序实例被称为app
,是app
包的成员。from app import app
语句从app
包导入其成员app
变量。 如果你觉得这很混乱,你可以重命名包或者变量。FLASK_APP
环境变量告诉Flask如何导入它:set
替换export
。flask run
的输出表明服务器正在运行在IP地址127.0.0.1上,这是本机的回环IP地址。 这个地址很常见,并有一个更简单的名字,你可能已经看过:localhost。 网络服务器监听在指定端口号等待连接。 部署在生产Web服务器上的应用程序通常会在端口443上进行监听,如果不执行加密,则有时会监听80,但启用这些端口需要root权限。 由于此应用程序在开发环境中运行,因此Flask使用自由端口5000。 现在打开您的网络浏览器并在地址栏中输入以下URL:/
,而第二个映射到/ index
。 这两个路由都与应用程序中唯一的视图函数相关联,所以它们产生相同的输出,即函数返回的字符串。 如果你输入任何其他网址,则会出现错误,因为只有这两个URL被应用程序识别。FLASK_APP
环境变量,从 1.0 版本开始,Flask 允许你设置只会在运行flask
命令时自动注册生效的环境变量,要实现这点,你需要安装 python-dotenv
:.flaskenv
的文件,其内容是:FLASK_APP
就可以自动加载了,如果你钟爱手动设定环境变量,那也不错,只是记得每次启动终端后要设定它。