教你如何使用 flask 框架在浏览器打印 hello world

2019-11-06 11:44:44 浏览数 (1)

安装Python

我就不再这里赘述了,我这里建议安装 anaconda3, 因为集成了很多常用的库,我们可以直接使用,不需要再去安装,可以参考我以前学习写得一篇文章 https://zhuanlan.zhihu.com/p/43283885

我们针对的都是在 windows 系统上的学习 ,ubantu 等系统就不会去讲了,不懂自行百度吧,少年,全部代码基于 python 3.7,如果是 python2.7 的话,尽早放弃吧。

安装完 python 我们可以尝试在 cmd 命令行 输入以下命令

代码语言:javascript复制
python

Python解释器中,光标不断闪烁,等待着你输入Python语句。如果出现这样的情况,说明 python 已经安装成功了。

安装Flask

开始安装Flask,在这之前我要告诉你安装Python三方包的最佳实践。

Python将所有三方包托管到一个公共仓库,任何人都能从这个公共仓库下载并安装所有的三方包。Python将三方包公共仓库命名为PyPI以表示Python Package Index的缩写(被一些人戏称为"cheese shop")。

安装三方包时,使用pip命令如下:

代码语言:javascript复制
pip install flask

我们可以看到,安装 flask 同时,还会下载 很多依赖分别是:

Werkzeug实现了WSGI,WSGI是应用程序和服务器之间的标准Python接口。

Jinja是一种模板语言,可呈现您的应用程序服务的页面。

MarkupSafe随Jinja一起提供。渲染模板时,它会逃脱不受信任的输入,以避免注入攻击。

ItsDangerous安全签名数据以确保其完整性。这用于保护Flask的会话cookie。

Click是用于编写命令行应用程序的框架。它提供flask命令,并允许添加自定义管理命令。

虚拟环境

使用虚拟环境来管理开发和生产中项目的依赖关系。

虚拟环境可以解决什么问题?您拥有的Python项目越多,就越有可能需要使用不同版本的Python库,甚至Python本身。一个项目的较新版本的库可能会破坏另一个项目的兼容性。

虚拟环境是Python库的独立组,每个项目一组。为一个项目安装的软件包不会影响其他项目或操作系统的软件包。

venv模块捆绑了Python 3 以创建虚拟环境。如果您使用的是现代版本的Python,则可以继续下一节。

如果您使用的是Python 2,请参阅先安装virtualenv。

创建环境

如果你正在使用Python3,虚拟环境已经成为内置模块,可以直接通过如下命令来创建它:

代码语言:javascript复制
python  -m venv venv

使用这个命令来让Python运行venv包,它会创建一个名为venv的虚拟环境。命令中的第一个“venv”是Python虚拟环境包的名称,第二个是要用于这个特定环境的虚拟环境名称。如果你觉得这样很混乱,可以用你自定义的虚拟环境名字替换第二个venv。我习惯在项目目录中创建了名为venv的虚拟环境,所以无论何时cd到一个项目中,都会找到相应的虚拟环境。

命令执行完成后,当前目录下就会新增一个名为venv的目录来存储这个虚拟环境的相关文件。

不管你用什么方法创建虚拟环境,创建完毕之后还需要激活才能够进入这个虚拟环境。要激活你的全新虚拟环境,需使用以下命令:

代码语言:javascript复制
venvScriptsactivate

激活一个虚拟环境,终端会话的环境配置就会被修改,之后你键入python的时候,实际上是调用的虚拟环境中的Python解释器。此外,终端提示符也被修改成包含被激活的虚拟环境的名称的格式。这种激活是临时的和私有的,因此在关闭终端窗口时它们将不会保留,也不会影响其他的会话。那么,当你需要同时打开多个终端窗口来调试不同的应用时,每个终端窗口都可以激活不同的虚拟环境而不会相互影响。

成功创建和激活了虚拟环境之后,你可以安装Flask了,命令如下:

代码语言:javascript复制
pip install flask

想要验证安装是否成功,可以打开Python解释器,并用import语句来导入它:

代码语言:javascript复制
import flask

如果语句没有报错,那么恭喜你,Flask安装成功了!

"Hello, World" Flask应用

Flask网站展示了一个仅有五行代码的简单示例应用程序。而我会告诉你一个稍微更复杂的例子,它将为你编写更大的应用程序提供一个很好的基础结构。

应用程序是存在于中的。在Python中,包含__init__.py文件的子目录被视为一个可导入的包。当你导入一个包时,__init__.py会执行并定义这个包暴露给外界的属性。

代码语言:javascript复制
mkdir app

并在其下创建文件__init__.py,输入如下的代码:

代码语言:javascript复制
from flask import Flask
app = Flask(__name__)
from app import routes

上面的脚本仅仅是从flask中导入的类Flask,并以此类创建了一个应用程序对象。传递给Flask类的__name__变量是一个Python预定义的变量,它表示当前调用它的模块的名字。当需要加载相关的资源,如我将在第二章讲到的模板文件,Flask就使用这个位置作为起点来计算绝对路径。代码的最后,应用程序导入尚未存在的routes模块。

其一,这里有两个实体名为appapp包由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/routes.py中的第一个视图函数的代码:

这个视图函数简单到只返回一个字符串作为问候用语。函数上面的两个奇怪的@app.route行是装饰器,这是Python语言的一个独特功能。装饰器会修改跟在其后的函数。装饰器的常见模式是使用它们将函数注册为某些事件的回调函数。在这种情况下,@app.route修饰器在作为参数给出的URL和函数之间创建一个关联。在这个例子中,有两个装饰器,它们将URL //index索引关联到这个函数。这意味着,当Web浏览器请求这两个URL中的任何一个时,Flask将调用该函数并将其返回值作为响应传递回浏览器。这样做是为了在运行这个应用程序的时候会稍微有一点点意义。

要完成应用程序,你需要在定义Flask应用程序实例的顶层创建一个命名为microblog.py的Python脚本。它仅拥有一个导入应用程序实例的行:

还记得两个app实体吗?在这里,你可以在同一句话中看到两者。Flask应用程序实例被称为app,是app包的成员。from app import app语句从app包导入其成员app变量。如果你觉得这很混乱,你可以重命名包或者变量。

只要确保所做的操作完全正确,那么你就可以看到如下面的项目结构图:

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

代码语言:javascript复制
set FLASK_APP=helloworld.py

万事俱备,只欠东风!运行如下命令来运行你的第一个Web应用吧:

代码语言:javascript复制
flask run

到此为止 helloworld 已经完成,今天就到这里吧,期待下一节课吧

0 人点赞