全栈 Python Flask 教程:创建你的第一个 Flask 应用
了解 Flask 框架
Flask 的关键方面:WSGI 和 Jinja2
Hello World - 创建你的第一个 Flask 应用程序
等等……什么是视图、路线和主机?
准备好开始一个项目了吗?这是你的任务。
接下来会发生什么?
原文发布于Educative.io
如果你是一名使用 Python 作为服务器端编程语言的 Web 开发人员,那么你有很多 Web 框架可供选择。其中最值得一提的框架之一是 Flask。
Flask 是一个用 Python 开发的微框架,它只提供必要的组件,例如路由、请求处理、会话等等。它提供了一系列库、工具和模块,用于开发博客、维基甚至商业网站等 Web 应用程序。由于它没有冗余代码或依赖项,因此被认为是“对初学者友好”的,这些冗余代码和依赖项不会分散用户对应用程序主要功能的注意力。
后端使用 Flask,但它使用了一种名为 Jinja2 的模板语言,用于创建 HTML、XML 或其他标记格式,并通过 HTTP 请求将其返回给用户。稍后会详细介绍。
本文旨在为您提供一个快速的 Python Flask 教程,帮助您创建第一个 Flask 应用。如果您具备一些 Python 基础知识,就能迅速上手,立即开始创建 Web 应用。如果您想开始您的第一个 Flask 项目,可以访问这里。
那么,我们今天将要探讨以下内容:
- 了解 Flask 框架
- Hello World - 你的第一个 Flask 应用
- URL路由和视图
- 更进一步:开始你的第一个项目
让我们开始吧!
了解 Flask 框架
烧瓶的特点
Flask之所以成为理想的Web应用程序开发框架,其一些特性包括:
1)Flask提供开发服务器和调试器。2
)它使用Jinja2模板。(稍后会详细介绍)
3)它兼容WSGI 1.0。(稍后会详细介绍)
4)它提供集成的单元测试支持。5
)Flask拥有许多扩展,可用于增强其功能。
什么是微框架?
微框架与全栈框架相反,全栈框架还提供额外的模块来实现身份验证、数据库 ORM、输入验证和清理等功能。
为什么 Flask 被称为微框架?
Flask 被称为微框架,因为它轻量级,只提供必要的组件,例如路由、请求处理、会话等等。对于数据处理等其他功能,开发者可以编写自定义模块或使用扩展。这种方式避免了编写不必要的样板代码,这些代码实际上根本用不到。
Flask 的关键方面:WSGI 和 Jinja2
你可能听说过“Flask 完全符合 WSGI 标准”或“Flask 使用 Jinja 作为模板语言”之类的说法。但这究竟是什么意思?WSGI 和 Jinja2 又是什么?让我们一起来了解这些术语的含义以及它们在 Flask 中的意义。
WSGI - Web 服务器网关接口
Web服务器网关接口(Web Server Gateway Interface,简称WSGI)是一个标准,它描述了 Web 服务器和客户端应用程序之间通信的规范。这些规范的详细信息请参见PEP333。以下是 WSGI 的一些优点:
- 应用程序组件的灵活性。
- 不同Python框架之间的互操作性。
- 随着用户数量的增加,应用程序的可扩展性如何?
- 开发速度方面的效率。
Jinja2——一种模板语言
Jinja是Python中使用的一种模板语言。但是,你可能会问,模板语言究竟是什么?
模板是用户看到的前端。对于网站而言,模板就是HTML页面。模板语言是一种可以在HTML代码中使用的语言,它可以让HTML页面上的内容动态化。
接下来,让我们开始创建你的第一个 Flask 应用程序。
Hello World - 创建你的第一个 Flask 应用程序
最简单的 Flask 应用只需要一个脚本!我们把这个文件叫做 app.py。我们将把程序分解成几个步骤,并逐一进行讨论。
步骤 1:导入模块
对于这个应用来说,我们只需要flask包中的Flask模块。所以,我们先导入它。
from flask import Flask
步骤 2:创建 Flask 对象
我们需要创建一个导入了 Flask 模块的对象。这个对象就是我们的 WSGI 应用程序app。如前所述,应用程序的 WSGI 部分由 Flask 模块负责处理。
app = Flask(__name__)
步骤 3:在主目录中运行应用程序
要运行我们的应用程序,我们需要调用run()应用程序对象的函数。
if __name__ == "__main__":
app.run()
该run()函数有一些可选参数。完整文档请参见此处。
步骤 4:创建视图函数
在运行应用程序之前,我们需要告诉应用程序在浏览器窗口中显示一些输出。因此,我们创建了一个名为 `Hello World` 的函数hello(),该函数返回字符串“Hello World!”。此函数的返回值将显示在浏览器中。
def hello():
return "Hello World!";
步骤 5:分配 URL 路由
最后,我们需要告诉 Flask 应用何时调用视图函数hello()。为此,我们将创建一个 URL 路由。每个视图函数都关联一个 URL 路由。这种关联是通过使用route()每个视图函数前的装饰器创建的。
@app.route("/")
def hello():
return "Hello World!";
全面实施
以下程序展示了 Flask 中“Hello World”应用程序的完整实现!
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!";
if __name__ == "__main__":
app.run(debug = True, host = "0.0.0.0", port = 3000)
等等……什么是视图、路线和主机?
URL路由和视图
网站首页通常位于 URL 末尾hostname带有`<home-page> /`、 `<home-page>`/home或/index类似含义的字符。
这类 URL 便于用户记忆和访问。如果首页地址是像 `<home-page>` 或/39283@&3911`<home-page>`这样随机的 URL,那就太奇怪了/more_eggs。Flask 允许我们使用route()装饰器将有意义的 URL 绑定到我们创建的每个视图函数。
什么是视图函数?
在讨论 MTV(模型-模板-视图)架构时,我们了解了视图的概念。在 Flask 中,我们创建了一个函数作为视图。回想一下 Hello World 示例,我们创建了一个名为 `view` 的函数hello。这个函数就是一个视图。然后,我们将其与一个路由绑定。
@app.route("/")
def hello():
return "Hello World!";
route()装饰师
路由装饰器接受以下参数:
rule该规则表示 URL 规则,该规则作为字符串传递给装饰器。endpoint(非必需):端点是绑定到 URL 路由的视图函数的名称。Flask 会自动处理此参数,开发者无需指定。options(可选):这些选项是可选参数。我们稍后会详细讨论。
静态路由
在静态路由中,我们将固定的 URL 字符串作为规则传递给route()装饰器。例如,在下面的迷你应用程序中,我们指定了两条静态路由,它们的 URL分别为/和/educative。
例子:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def home():
return "Welcome to the HomePage!"
@app.route("/educative")
def learn():
return "Happy Learning at Educative!"
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=3000)
解释
home()看法
此视图函数对应于路由"/"。当您打开 URL 或查看“输出”选项卡时,将调用此视图。它"/"始终是任何 Web 应用程序的默认路由。
例如,当我们访问 educative.io 时,` host= “educative.io”` 和route`= “/”`。
learn()看法
此视图函数对应于路由"/educative"。当您打开 URL 并附加参数时"/educative",将调用此视图。
例如,当我们访问 educative.io/explore 时,host= “educative.io” 和route= “/explore”。
准备好开始一个项目了吗?这是你的任务。
在前几节中,我们实现了第一个 Flask 应用(即 Hello World 应用),学习了如何创建静态 URL 路由以及如何将它们绑定到视图。现在,我们将利用这些知识开始构建一个实际应用。
我们将要开发的应用程序是一个名为“爪印救援中心”的动物救援网站。让我们从创建首页和关于我们页面开始。
问题陈述
在这个挑战中,我们将实现应用程序的“首页”和“关于”页面的视图。1
)两个视图的 URL 路由都应该对用户友好。2
)首页应该输出字符串:"Paws Rescue Center 🐾"。3
)关于页面应该输出以下行:"We are a non-profit organization working as an animal rescue. We aim to help you connect with the purrfect furbaby for you! The animals you find on our website are rescued and rehabilitated animals. Our mission is to promote the ideology "adopt, don't Shop"! "。
首页预期输出
关于页面预期输出
以下是该项目启动阶段的完整实现流程:
"""Flask Application for Paws Rescue Center."""
from flask import Flask
app = Flask(__name__)
@app.route("/")
def homepage():
"""View function for Home Page."""
return "Paws Rescue Center 🐾"
@app.route("/about")
def about():
"""View function for About Page."""
return """We are a non-profit organization working as an animal rescue center.
We aim to help you connect with the purrfect furbaby for you!
The animals you find at our website are rescue animals which have been rehabilitated.
Our mission is to promote the ideology of "Adopt, don't Shop"! """
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=3000)
解释
这个挑战旨在帮助我们入门 Flask 框架的开发。让我们来分析一下解决方案。
首页
首先,我们来看首页的解决方案。
URL路由
我们希望首页成为网站的第一个着陆页,因此,使用路由"/"是最合理的,如第 5 行所示。
输出
题目中已提供字符串“ "Paws Rescue Center 🐾"”,作为所需输出。我们只需在视图函数中返回此字符串即可。这可以在上面所示解决方案的第 8 行找到。
关于页面
接下来,在“关于我们”页面中,我们实现了以下功能。
URL路由
关于页面的最明显且用户友好的 URL 路径是"/about"(参考解决方案中的第 10 行)。
输出
问题陈述中提供的输出字符串在第 13-16 行返回。
距离最终成品还有很多工作要做,但这就是完成后的样子。如果您想继续按照分步指南完成这个项目,可以访问这里。
接下来会发生什么?
恭喜!你已经学会了如何创建你的第一个 Flask 应用,并开始了你的第一个项目。不过,还有很多东西需要学习,例如静态和动态模板、表单处理、使用 SQLAlchemy 连接数据库,以及你可以对模型执行的不同操作(例如插入、检索等)。
如果你对使用 Flask 开发 Web 应用感兴趣,我强烈推荐这门以项目为基础的课程:《Flask:Python Web 应用开发》。你将学习到上面提到的所有内容(静态/动态模板、表单处理等等),最棒的是,你可以完成你刚刚开始的项目,并将其添加到你的作品集中。
为什么要继续学习 Flask 框架?如果你希望成为一名全栈开发人员,这是一项非常有价值的技能。全栈开发人员需求量很大,因为他们能够全面贡献代码。这是一个绝佳的机会,可以让你深入探索开发的各个方面,从而获得更高的薪酬。
文章来源:https://dev.to/educative/full-stack-python-flask-tutorial-creating-your-first-flask-application-1aok


