首页 > 后端开发 > Python教程 > 烧瓶开始,Python缩影

烧瓶开始,Python缩影

Joseph Gordon-Levitt
发布: 2025-02-16 10:30:14
原创
474 人浏览过

Getting Started with Flask, a Python Microframework

本文介绍Flask,一个流行的Python微型框架,它为庞大的Django框架提供了一种替代方案。

Flask的设计理念是轻量级和灵活,允许开发者快速轻松地创建网络应用程序。本文将涵盖Flask是什么,它的关键特性,简单API的优势,它在支持第三方扩展方面的灵活性,最常用的Flask扩展,以及何时应该或不应该使用Flask。

要点

  1. Flask特性和用例概述:本文介绍Flask,重点介绍其轻量级、灵活的特性以及其对各种Web项目的适用性。它探讨了Flask的简洁性、扩展支持、关键特性以及原型设计、RESTful API和电子商务应用程序等实际用例。
  2. 与Django的比较分析:本文将Flask与Django进行了对比,强调了Flask的微型框架方法,该方法提供了必要的工具,而没有复杂的结构,这使得它成为需要极简主义和自定义扩展的项目的理想选择。
  3. Flask入门:本文提供了关于设置Flask开发环境、创建和运行基本应用程序以及在路由、模板、表单和扩展中利用Flask功能的分步指南。

什么是Flask?

Flask是用Python编写的微型Web框架,用于开发Web应用程序。它建立在一个简单的理念之上:保持简单和轻量级,只为开发者提供构建Web应用程序所需的最重要工具,而不会带来不必要的复杂性。

它建立在Werkzeug WSGI工具包之上,该工具包提供了处理请求和响应所需的Web服务器功能,以及Jinja2模板引擎,它使Flask能够处理HTML模板,允许开发者创建动态Web应用程序。

以下是一些使Flask成为一个很棒的框架的关键特性:

  • 它有一个简单的API,用于创建Web路由和处理请求。
  • Jinja模板引擎支持HTML模板,允许开发者轻松创建网页。
  • 由于它支持第三方扩展,因此它是高度可扩展的,因此开发者可以根据项目的需要安装扩展。
  • 它捆绑了一个开发服务器,可以轻松测试和调试应用程序。

总的来说,Flask提供了一个强大、灵活且简单的框架来构建Web应用程序。对于新手和经验丰富的Web开发者来说,它都是一个不错的选择,并且是Python Web开发生态系统中最流行的Web框架之一。

Flask的优势

现在让我们更详细地了解一下在开发中使用Flask的一些优势。

简洁性。Flask的设计理念强调简洁性,这使得任何级别的开发者都能轻松理解和使用它。这也意味着开发者学习曲线非常低,因为他们只需要学习几个概念和API就能开始构建Web应用程序。

灵活性。Flask的微型特性——只提供Web框架的核心功能——使开发者能够使用Flask扩展或第三方库对其进行自定义和扩展以满足其需求。

文档。Flask文档非常全面,涵盖了从基础到高级主题的内容,使开发者很容易学习如何使用该框架。

兼容性。Flask与各种Python版本兼容,这使得它易于与现有的Python代码库一起使用。它还支持多个Web服务器,这使得它易于部署在各种托管平台上。

快速开发。Flask的简洁性和灵活性减少了设置应用程序所需的样板代码,使开发者能够快速入门。

在网络上,Flask以许多有趣的方式使用。一些值得注意的例子包括:

  • PgAdmin。Postgres管理界面运行在Flask实例上,为开发者提供了一个界面,他们可以在其中管理他们的Postgres数据库。
  • Twilio。这是一个通信平台,在其多个API中使用Flask。
  • Pinterest。这个照片分享应用程序在其Web开发堆栈中使用Flask,允许其团队轻松创建一些自定义功能和集成。

何时使用Flask

Flask的简洁性和易用性使其成为各种Web项目的绝佳选择:

  • 原型设计。它的易用性和灵活性使其成为快速创建原型的绝佳选择,允许开发者快速构建和测试新功能。
  • 创建RESTful API。它自己的简单API使得创建和处理HTTP请求变得容易。
  • 电子商务应用程序。它非常适合构建在线市场和电子商务平台。
  • 金融。它可用于构建金融应用程序,包括帐户管理、交易处理和投资跟踪。
  • AI。它提供了一种有用且直接的方法来构建和部署AI训练模型。

何时不使用Flask

虽然Flask是一个很棒的框架,并且有很多优点和强大的功能,但在某些情况下,这些功能会对其不利。让我们探讨一些更适合其他类型框架的项目。

需要内置功能的项目。作为一个微型框架,Flask只提供创建Web应用程序所需的核心部分。如果一个项目需要,比如说,一个管理界面、身份验证或ORM,那么Django是一个更好的选择。

具有严格安全要求的项目。由于Flask是一个灵活的框架,我们必须依赖第三方扩展才能在我们的应用程序中实现某种程度的安全。虽然这当然有效,但最好依赖于一个更经受考验的框架,该框架采用更安全的方法,例如Tornado或Twisted。

强制执行某些编码标准的项目。由于Flask的灵活性,在上面开发应用程序可以让开发者以他们认为合适的方式创建应用程序。但是,像Django这样的框架确保开发者遵循特定的约定,这意味着开发者可以轻松地从一个项目转移到另一个项目。

设置Flask开发环境

现在让我们看看如何开始使用Flask,从设置开发环境,到安装,最后启动一个最小的应用程序。

先决条件

开发机器上必须安装Python。以下是关于如何安装Python的说明(尽管我们可能已经安装了它)。

创建虚拟环境

虚拟环境是一个隔离的Python环境,我们可以在其中为特定项目安装包,而不会影响全局Python安装。(以下是关于为什么虚拟环境有用的进一步讨论。)有不同的包可以在Python中创建虚拟环境,例如virtualenv、venv或Conda。

在本文中,我们将使用virtualenv。我们可以使用以下命令安装它:

<code>pip install virtualenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

安装virtualenv后,我们可以创建一个目录,我们的Flask应用程序将驻留在其中。我们可以随意命名该目录——除了Flask,因为这会导致冲突。我们将把它命名为flask_intro:

<code>mkdir flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

接下来,进入该目录,以便我们可以开始使用它:

<code>cd flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

在这个目录中,让我们现在使用以下命令创建我们的虚拟环境:

<code>virtualenv myenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

上面的命令创建一个虚拟环境并将其命名为myenv。让我们激活它,以便我们可以在其中安装Flask。要在Linux或macOS上激活虚拟环境,请使用以下命令:

<code>. myenv/bin/activate</code>
登录后复制
登录后复制
登录后复制

在Windows上,使用此命令:

<code>. myenv\Scripts\activate</code>
登录后复制
登录后复制

一旦我们的虚拟环境被激活,它将在shell提示符上显示虚拟环境的名称,类似于下面的输出:

<code>(myenv)/~(path to your project directory)$</code>
登录后复制

在激活的虚拟环境中,我们可以继续使用以下命令安装Flask:

<code>pip install Flask</code>
登录后复制

Flask安装完成后,让我们继续创建一个最小的应用程序。我们将创建一个模块来保存我们的Flask应用程序。为简单起见,我们将其命名为hello.py。在Linux或macOS上,我们可以使用以下命令在我们的flask_intro目录中创建该文件:

<code>touch hello.py</code>
登录后复制

上面的命令创建一个名为hello.py的文件。我们也可以使用开发环境来创建该文件。创建文件后,将下面的代码放入其中并保存:

<code># hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello, World!'</code>
登录后复制

在上面的代码中,我们从flask模块导入Flask类,然后创建一个名为app的Flask实例并传递__name__变量。

然后我们有路由装饰器@app.route("/"),这意味着当有人访问应用程序的根路由后,hello_world()函数将被触发。

我们可以通过多种方式运行应用程序,所以让我们来看一些。第一种方法是为flask命令提供多个参数:--app,然后是保存我们Flask应用程序的模块的名称,然后运行。见下文:

<code>flask –app <the module="" name="" of="" your=""> run</the></code>
登录后复制

使用上面的示例运行我们的示例应用程序:

<code>pip install virtualenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

这将在默认端口5000上运行我们的应用程序,因此该应用程序将在http://localhost:5000/或http://127.0.0.1:5000/上可用。如果我们希望该应用程序在其他端口上可用,我们可以使用-p或--port选项指定端口。例如:

<code>mkdir flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

这将在端口8080上运行服务器。我们可以运行应用程序的另一种方法是只使用flask run命令。但是,为了能够做到这一点,我们需要告诉Flask保存Flask实例的模块的名称,我们通过设置FLASK_APP环境变量来做到这一点。因此,在我们的例子中,Flask应用程序包含在一个名为hello.py的文件中。所以我们可以这样设置:

<code>cd flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

现在我们已经设置了FLASK_APP环境变量,我们可以这样运行开发服务器:

<code>virtualenv myenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

使用这段代码,我们现在运行了一个Web应用程序。这演示了Flask的核心理念:我们不需要很多样板代码就能让事情顺利进行。但是,我们上面设置的应用程序并不是非常实用或有用,因为它只在我们的网页上呈现字符串“Hello World!”。要执行任何更有用的操作,我们可以转向模板。接下来我们将看看如何处理它们。

Flask模板

Flask模板是一种创建动态网页的方式,它可以根据各种因素显示不同的内容,例如来自数据库的数据或用户输入。Flask中的模板是HTML和特殊占位符(称为模板变量)的组合,这些占位符在运行时被替换为实际值。

模板存储在templates目录中。因此,要使用模板,我们需要从flask导入render_template()方法。render_template()方法接受模板名称和任何需要传递给模板的可选数据。

让我们来看一个使用模板呈现网页的函数示例:

<code>. myenv/bin/activate</code>
登录后复制
登录后复制
登录后复制

在上面的示例中,我们有一个视图函数——index()——它通过@app.route()装饰器绑定到根URL("/")。该函数有两个变量,title和message。最后,我们将模板index.html传递给render_template(),以及title和message变量。

为了使上面的代码工作,我们需要在templates目录中有一个index.html模板。因此,模板将如下所示:

<code>. myenv\Scripts\activate</code>
登录后复制
登录后复制

在index.html文件中,占位符{{title}}和{{message}}被替换为在render_template()方法中传递给模板的值。

模板还可以包含更复杂的逻辑,例如if语句和for循环,这允许生成更动态的页面。

因此,Flask中的模板为开发者提供了一个非常强大的选项,用于创建充满用户生成信息的动态网页。

Flask路由

大多数Web应用程序将拥有多个URL,因此我们需要有一种方法来知道哪个函数处理哪个URL。在Flask中,这种映射称为路由——将URL绑定或映射到视图函数的过程。将URL绑定到视图函数允许应用程序处理不同类型的请求,例如GET、POST、PUT、DELETE等等。它还使应用程序能够处理来自不同客户端的多个请求。

要在Flask中设置路由,我们使用route()装饰器。装饰器将URL绑定到视图函数——因此,当用户访问应用程序中存在的URL时,Flask会触发关联的视图函数来处理请求。

让我们来看一个例子:

<code>pip install virtualenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

在上面的示例中,我们定义了一个about URL (/about)。当应用程序接收到about URL的请求时,Flask会调用about()函数,该函数返回字符串“This is the about page”。

到目前为止,即使这些示例返回不同的页面,它们都只使用GET HTTP请求。为了能够处理任何特定的请求,我们可以将HTTP方法指定为route()装饰器的可选参数。

让我们来看一个PUT请求的示例:

<code>mkdir flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

在这个例子中,我们定义了一个路由来处理PUT请求,以更新给定其user_id的用户详细信息。我们在路由中使用来指示用户ID应该是一个整数。

在update_user()函数中,我们使用request.get_json()方法从请求体获取用户数据。我们对用户数据执行某些操作,例如更新数据库中的用户,然后返回一个指示成功或失败的响应以及一个HTTP状态代码(在这种情况下为200,表示成功)。

总的来说,路由允许Flask能够处理不同类型的请求,并允许我们的应用程序根据用户访问的URL以不同的方式处理和处理数据。

Flask表单和验证

除了为用户显示数据外,Flask模板还可以接收用户的输入以进行进一步处理或存储。为此,Flask提供了对处理HTML表单和处理用户输入的内置支持。Flask表单基于WTForms库,该库提供了一种灵活而强大的方法来处理表单数据和执行验证。但是,该库不是标准Flask安装的一部分,因此我们需要使用以下命令安装它:

<code>cd flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

安装WTForms后,要在Flask中使用表单,我们需要定义一个表单类,该类将继承自flask_wtf.FlaskForm。该类将包含表单上的字段以及应该应用于它们的任何验证规则。

让我们来看一个登录表单的示例:

<code>virtualenv myenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

在上面的示例中,我们定义了一个带有两个字段——email和password——以及一个提交按钮的登录表单。我们还有一个validators参数,用于为每个字段指定验证规则。例如,在这种情况下,我们要求email字段包含有效的电子邮件地址,password字段包含至少六个字符的密码。

定义了表单类后,我们可以在登录视图函数中使用它来呈现表单和处理用户提交的表单数据。让我们来看一个视图函数的示例:

<code>pip install virtualenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

在上面的示例中,我们有一个接受两种HTTP方法(GET和POST)的登录视图,因此当用户从浏览器访问URL时,LoginForm将使用render_template方法呈现为HTML表单,当用户提交表单时,我们使用validate_on_submit方法检查表单是否有效。如果表单有效,我们将访问电子邮件和密码。

login.html表单可能如下所示:

<code>mkdir flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

上面的模板将呈现电子邮件和密码字段及其标签,以及带有文本“Login”的提交按钮。form.csrf_token字段包含在内,以防止跨站点请求伪造(CSRF)攻击。{% for %}循环用于显示可能发生的任何验证错误。

通过使用Flask表单,我们有了一种强大的方法来处理用户输入,并且我们将能够验证他们输入的数据。

Flask扩展

正如我们所看到的,Flask是一个微型框架,它只包含创建Web应用程序所需的最重要部分。但是,如果我们需要添加Flask本身没有提供的功能,我们需要向安装中添加包。Flask扩展是我们提供此附加功能的方式。我们可以简单地安装所需的包。Flask社区创建了许多扩展。

以下是一些最流行的扩展:

  • Flask-SQLAlchemy:提供与SQLAlchemy工具包的集成,可以轻松与数据库交互。
  • Flask-Login:为Flask提供用户身份验证和会话管理。
  • Flask-Mail:提供一个简单的界面来从Flask发送电子邮件。

Flask社区创建了数百个扩展来处理不同的功能。使用扩展通常很简单。首先,我们需要使用pip安装所需的扩展。

让我们来看一个使用Flask-SQLAlchemy的示例。首先,我们需要安装它:

<code>cd flask_intro</code>
登录后复制
登录后复制
登录后复制
登录后复制

接下来,我们需要配置它。例如:

<code>virtualenv myenv</code>
登录后复制
登录后复制
登录后复制
登录后复制

在上面的示例中,我们有一个User模型,其中包含username和email字段。我们还配置了SQLALCHEMY_DATABASE_URI,指示我们使用位于example.db的SQLite数据库。设置好之后,我们现在可以使用db对象与数据库进行交互。例如,我们可以创建一个新用户并将其添加到数据库中,如下所示:

<code>. myenv/bin/activate</code>
登录后复制
登录后复制
登录后复制

使用Flask扩展,我们的应用程序能够拥有比通常使用核心Flask实现时更多的功能。

结论

在本文中,我们介绍了Flask,一个轻量级且灵活的Python Web框架。我们讨论了使用Flask进行Web开发的优势,包括其简洁性、灵活性和易用性。我们还介绍了如何设置开发环境、创建路由、使用模板、处理表单以及使用Flask-SQLAlchemy等扩展。

总而言之,Flask是构建任何规模Web应用程序(从小型的个人项目到大型的商业应用程序)的绝佳选择。它易于学习和使用,但也通过其众多扩展提供高级功能。

如果您有兴趣了解更多关于Flask的信息,以下是一些额外的资源:

  • Flask文档
  • Miguel Grinberg的Flask Mega-Tutorial
  • Miguel Grinberg的Flask Web Development
  • 一个简单的Flask应用程序教程
  • Real Python Flask教程

如果您想了解更多关于Django和Flask及其最佳用例的信息,请查看《使用Django和Flask进行Python Web开发》。

您还可以查看这些免费的Flask样板来构建您的第一个Web应用程序。

关于Flask(Python框架)的常见问题解答

什么是Flask?

Flask是Python的微型Web框架。它旨在轻量级且易于使用,使其成为开发Web应用程序和API的绝佳选择。

如何安装Flask?

您可以使用pip(Python的包管理器)安装Flask。使用命令<code>pip install Flask</code>在您的系统上安装Flask。

Flask的关键特性是什么?

Flask以其简洁性、灵活性和极简主义而闻名。它提供URL路由、请求处理和模板渲染等功能,同时允许开发者根据需要选择和集成其他组件。

Flask与其他Python Web框架(如Django)相比如何?

Flask是一个微型框架,而Django是一个全栈Web框架。Flask提供更大的灵活性和自由度来选择您的组件,而Django则附带许多内置功能和约定。

我可以用Flask构建RESTful API吗?

是的,Flask非常适合构建RESTful API。其简洁性和对HTTP方法的支持使其成为创建API端点的热门选择。

Flask适合大型Web应用程序吗?

Flask可用于大型应用程序,但与Django等全栈框架相比,它可能需要更多的手动配置和组件集成。

以上是烧瓶开始,Python缩影的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板