Hello, World Flask 应用
Flask 网站 展示了一个仅有五行代码的简单示例应用程序。 而我会告诉你一个稍微更复杂的例子,它将为你编写更大的应用程序提供一个很好的基础结构。
应用程序是存在于 包 中的。 在 Python 中,包含 init .py 文件的子目录被视为一个可导入的包。 当你导入一个包时, init .py 会执行并定义这个包暴露给外界的属性。
那就创建一个名为 app
的包来存放整个应用吧。记得切换到 microblog 目录下,并执行如下命令:
(venv) $ mkdir app
并在其下创建文件 __init__.py
,输入如下的代码:
from flask import Flask
app = Flask(__name__)
from app import routes
上面的脚本仅仅是从 flask 中导入的类 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/routes.py 中的第一个视图函数的代码:
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 应用程序实例的顶层(译者注:也就是 microblog 目录下)创建一个命名为 microblog.py 的 Python 脚本。 它仅拥有一个导入应用程序实例的行:
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 上,这是本机的回环 IP 地址。 这个地址很常见,并有一个更简单的名字,你可能已经看过: localhost 。 网络服务器监听在指定端口号等待连接。 部署在生产 Web 服务器上的应用程序通常会在端口 443 上进行监听,如果不执行加密,则有时会监听 80,但启用这些端口需要 root 权限。 由于此应用程序在开发环境中运行,因此 Flask 使用自由端口 5000。 现在打开您的网络浏览器并在地址栏中输入以下 URL:
http://localhost:5000/
或者,你也可以使用另一个 URL:
http://localhost:5000/index
应用程序路由映射执行了吗? 第一个 URL 映射到 /
,而第二个映射到 / index
。 这两个路由都与应用程序中唯一的视图函数相关联,所以它们产生相同的输出,即函数返回的字符串。 如果你输入任何其他网址,则会出现错误,因为只有这两个 URL 被应用程序识别。
完成演示之后,你可以按下 Ctrl-C 来停止 Web 服务。
真是可喜可贺!你已经成功地向成为一名 Web 开发者的道路上迈出了重要的第一步!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论