开篇-Flask入门指南:构建优雅的Web应用-以及我的开源产品

目录

特点

常见功能

Flask架构

环境安装与配置

Python 版本

依赖

可选依赖

greenlet

虚拟环境

创建一个虚拟环境

激活虚拟环境

安装 Flask

一个最小的应用

应用发现行为

外部可见的服务器

调试模式


图片

更多关于Flask相关的技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

Flask是一个轻量级的Python Web应用程序框架,它是使用Python编写的,它被广泛用于快速开发构建Web应用程序和API。

原文:开篇-Flask入门指南:构建优雅的Web应用-以及我的开源产品

它的设计理念是简单、易用和灵活可扩展,因此备受开发者的喜爱。我所知道的很多创业型的公司的初始项目,简单的项目都采用的是flask开发框架,因为初期的项目讲究的是快速开发,功能概念验证,能够快速看到产品的原型效果。这里,我的第一款产品《安全运营中心(SOC)-信息资产采集与安全评估系统(ICSA)》的实现使用的就是这种技术栈来进行快速开发,当然,目前最新的Python版本3.12已经发布,我将基于最新的Python版本以及Flask+MongoDB+Redis+Jinja来开源我的这款产品的部分功能,用于粉丝们学习,同时,也方便满足于对这方面有需求的企业用户。

图片

项目Gitee地址:https://gitee.com/SteveRocket/SOC_ICSA

图片

项目Github地址:https://github.com/zrf-rocket/SOC_ICSA

欢迎给个star,也可以本项目提issues,哈哈

图片

图片

当然了,如果涉及到稍微大点的项目,比如需要一个后台管理系统、登录登出的功能,我们可以使用Python的另外一款WebFramework——Django,关于Django的介绍,在前面的文章中也有非常多的文章篇幅做了介绍,可以关注公众号CTO Plus自行查阅。

图片

花了一个周末时间,整理了下关于【Flask系列】的文章大纲如下:

  1. 1.     《开篇-Flask入门指南:构建优雅的Web应用》

  2. 2. 《探索Flask的强大功能:应用模块详解》

  3. 3. 《保护你的应用免受安全威胁:Flask中的HTML转义》

  4. 4. 《无缝导航:深入理解Flask的路由模块》

  5. 5. 《个性化路由:使用Flask的变量规则打造灵活的URL》

  6. 6. 《打造用户友好的URL体验:Flask中的唯一URL和重定向行为》

  7. 7. 《轻松构建URL:Flask的URL构建技巧》

  8. 8. 《处理请求的艺术:Flask中的HTTP方法解析》

  9. 9. 《美化你的应用:Flask中的灵活模板渲染》

  10. 10. 《从请求中提取宝藏:Flask中的请求数据操作技巧》

  11. 11. 《掌握Flask的全局对象:构建强大的Web应用》

  12. 12. 《重定向和错误处理:Flask中的优雅异常处理》

  13. 13. 《定制响应:Flask中的响应处理技巧》

  14. 14. 《保持用户状态:Flask中的会话管理技术》

  15. 15. 《与用户互动:Flask中的消息闪现机制》

  16. 16. 《追踪应用行为:Flask中的日志记录技巧》

  17. 17. 《高效部署:Flask中集成WSGI中间件的实践》

  18. 18. 《打造可维护的项目:Flask中的项目布局策略》

  19. 19. 《个性化设置:Flask中的应用配置技巧》

  20. 20. 《高效处理数据:Flask中的数据库定义与操作》

  21. 21. 《模块化开发:Flask中蓝图和视图的完美结合》

  22. 22. 《美化你的应用界面:Flask中模板的魔法》

  23. 23. 《提升用户体验:Flask中的静态文件处理技巧》

  24. 24. 《构建博客应用:Flask中的博客蓝图实践》

  25. 25. 《保证质量:Flask应用的测试技巧》

  26. 26. 《全面检验:Flask中的单元测试与测试覆盖率》

  27. 27. 《优雅处理异常:Flask中的应用错误处理策略》

  28. 28. 《解决难题:Flask中调试应用程序错误的技巧》

  29. 29. 《追踪应用行为:Flask中的日志记录技巧》

  30. 30. 《灵活配置:Flask中的配置管理技巧》

  31. 31. 《实时通信:Flask中的Blinker信号机制解析》

  32. 32. 《面向对象开发:Flask中基于类的视图实践》

  33. 33. 《构建可扩展的应用:Flask中的应用程序结构与生命周期》

  34. 34. 《根据环境定制:Flask中的应用情境管理技巧》

  35. 35. 《个性化请求处理:Flask中的请求情境管理技巧》

  36. 36. 《模块化开发:Flask中使用蓝图构建可扩展应用》

  37. 37. 《命令行的魔力:Flask中的命令行接口技巧》

  38. 38. 《快速迭代开发:Flask中的开发服务器实践》

  39. 39. 《轻松调试:在Shell中使用Flask进行开发》

  40. 40. 《扩展性与可维护性:Flask中的大型应用开发实践》

  41. 41. 《灵活构建:Flask中的应用工厂模式》

  42. 42. 《高效任务调度:Flask中的应用调度技巧》

  43. 43. 《定制URL处理:Flask中的URL处理器实践》

  44. 44. 《轻松管理数据:Flask中使用SQLite3数据库》

  45. 45. 《高效操作数据库:Flask中使用SQLAlchemy的技巧》

  46. 46. 《优雅处理文件上传:Flask中的文件上传技巧》

  47. 47. 《装饰你的视图:Flask中的视图装饰器技》

  48. 48. 《简化表单验证:使用WTForms提高Flask应用的数据安全性》

  49. 49. 《构建可维护的模板:Flask中的模板继承技巧》

  50. 50. 《优化用户体验:Flask中的消息闪现技巧》

  51. 51. 《前后端交互:Flask中使用JavaScript、fetch和JSON的高效方式》

  52. 52. 《提升性能:Flask中的惰性载入视图优化策略》

  53. 53. 《灵活存储数据:使用MongoEngine扩展在Flask中操作MongoDB》

  54. 54. 《个性化页面:在Flask中添加自定义页面图标》

  55. 55. 《高效处理大数据量:Flask中流内容的处理技巧》

  56. 56. 《异步处理请求:Flask中延迟的请求回调实现异步操作》

  57. 57. 《灵活处理请求:Flask中的HTTP方法重载技巧》

  58. 58. 《确保数据安全:Flask中的请求内容校验实践》

  59. 59. 《异步任务处理:使用Celery优化Flask应用的后台任务》

  60. 60. 《定制化应用:通过继承Flask定制你的Web应用》

  61. 61. 《构建现代化应用:使用Flask构建响应式单页应用》

  62. 62. 《保护你的应用:Flask中的安全注意事项与最佳实践》

  63. 63. 《从开发到部署:Flask应用的生产环境部署与可安装化》

  64. 64. 《应对高并发:Flask中的高并发实践与原理解析》

  65. 65. 《异步编程:Flask中使用async和await提升性能》

  66. 66. 《背后的设计:探索Flask的设计思路与哲学》

  67. 67. 《定制化功能:Flask中开发自定义扩展的技巧与实践》

  68. 68. 《代理服务器支持:告诉Flask如何处理代理服务器的请求》

  69. 69. 《深入探究:Flask上下文管理机制的源码剖析》

  70. 70. 《源码包模块:解析Flask:深入源码剖析Flask的源码包模块》

  71. 71. 《进阶之路:深度总结Flask的高级特性与用法》

  72. 72. 《Flask安全开发指南》

关于Flask扩展方面的内容可以参考公众号CTO Plus前面的文章内容:Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结

本文我将详细介绍Flask的特点、使用方法和常见功能。让读者能够快速上手并深入了解Flask框架的使用和原理。

首先,Flask 依赖 Werkzeug WSGI 套件、Jinja模板引擎和Click CLI套件。

Flask 提供了配置和约定,以及合理的默认值,以开始使用。文档的这一部分 解释了Flask框架的不同部分以及如何使用、定制和扩展。除了 Flask 本身,社区维护的扩展可以添加更多功能。

Flask跟Django、Tornado一样都属于Python的Web框架。在前面的文章《Python常用开发框架Framework(WEB、测试、爬虫)总结》中总结了Python相关的所有Web开发框架,以及爬虫框架,具体内容可以关注公众号CTO Plus进行查阅。

总之,Flask是一个简洁、易用且灵活的Python Web框架,它提供了基本的工具和功能,同时又具备可扩展性。开发者可以使用Flask来构建各种Web应用程序和API,并根据需求选择合适的扩展库来增强功能。无论是初学者还是有经验的开发者,Flask都是一个非常值得尝试的Web框架。

接下来,我将先介绍下Flask的特点

特点

以下是Python Flask的一些主要特点:

  • 简洁:Flask的设计理念是保持简单和精益,它提供了基本的工具和功能,同时保持了灵活性和可扩展性。

  • 易上手-易用性:Flask的学习曲线较为平缓,它的文档和教程非常丰富,开发者可以快速上手并开始构建Web应用程序,Flask的API非常简单,易于理解和学习,因此它非常适合初学者

  • 轻量级:Flask没有过多的依赖(多余的库)、工具包和复杂的配置,它的核心只包含了基本的功能,因此运行效率较高,使其非常轻量级,这也意味着你可以根据需要添加自己的库。

  • 可扩展:Flask是可扩展的,提供了丰富的扩展库,开发者可以根据需求选择合适的扩展(插件)来增强应用程序的功能,并且可以很容易地将其与其他库和框架集成。

  • 灵活性:Flask允许你选择所需的组件,支持与其他Python库和框架的集成,例如模板引擎(Jinja2)、数据库(SQLAlchemy)、表单验证(Werkzeug、WTForms)等等。

  • RESTful支持:Flask易于使用RESTful API,并且可以轻松地创建RESTful Web服务。

常见功能

  1. 路由:使用装饰器来定义URL路由和对应的处理函数,可以处理不同的HTTP方法,例如GET、POST等。

  2. 请求和响应:Flask提供了Request和Response对象,可以方便地处理请求参数和生成响应数据。

  3. 模板引擎:Flask集成了Jinja2模板引擎,可以方便地渲染动态内容,并将数据和模板进行分离。

  4. 表单处理:Flask提供了Werkzeug库来处理表单数据,可以方便地验证和获取表单数据。

  5. 数据库集成:Flask可以与各种数据库进行集成,如SQLite、MySQL和MongoDB等,可以使用ORM工具或原生SQL来进行数据库操作。

  6. 身份验证:Flask提供了Flask-Login库来处理用户身份验证和会话管理,可以方便地实现用户登录和权限控制。

  7. 错误处理:Flask提供了错误处理机制,可以自定义错误页面和处理函数,以提供更好的用户体验。

  8. 扩展库:Flask拥有丰富的扩展库,如Flask-WTF用于处理Web表单、Flask-RESTful用于构建RESTful API等,可以根据需求选择合适的扩展来增强应用程序的功能。参考文章:《Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结

Flask架构

Flask 是一个使用 Python 编写的 Web 应用程序框架。它使用了 Werkzeug 工具箱和 Jinja2 模板引擎。

Flask 框架主要由以下模块组成:

应用模块:Flask 的核心模块,是整个Web 应用程序的入口,负责接收 HTTP 请求并返回响应。它还负责路由、错误处理、上下文等功能。

路由模块:Flask 使用装饰器来定义URL 路由和视图函数之间的映射关系。

视图模块:视图函数是 Flask Web 应用程序的核心,它处理 HTTP 请求并返回响应,可以返回 HTML 页面、JSON 数据等。

模板模块:Flask 使用 Jinja2 模板引擎来生成 HTML 页面。模板引擎提供了丰富的语法和过滤器,可以轻松地生成复杂的 HTML 页面。

数据库模块:Flask 可以轻松地与多种数据库集成,包括 MySQL、PostgreSQL、SQLite等。

表单模块:Flask-WTF 是 Flask的表单处理扩展,提供了方便的表单处理方法,可以轻松地创建表单、验证表单数据等。

扩展模块:Flask 的扩展模块提供了各种功能,如邮件发送、缓存、登录认证等。

Flask 的设计理念是简单、灵活、易于扩展,它不会限制开发者的选择,可以根据开发者的需求选择各种第三方扩展来增加功能。同时,Flask 也提供了一些基础的功能和工具,方便开发者快速搭建 Web 应用程序。我们将在公众号CTO Plus的下一篇文章《Flask的应用模块: 探索Flask的强大功能:应用模块详解》介绍下这些模块的使用。

环境安装与配置

首先我来介绍下Flask开发环境的搭建,当然开发工具还是使用前面文章介绍的Python开发标配工具PyCharm。目前为止Python最新版本已经到了Python3.12。但是我已经安装了Python3.11,所以本文使用的Python环境版本都是Python3.11,如果你使用的是低版本的Python(如Python2),那么你的有些验证结果和用法可能会和我的有些不一样。Python2和3有很大的差别,部分差别介绍可以查看公众号CTO Plus前面的文章《Python2与Python3的9点差异对比总结》。

更多关于Flask相关的技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

Python 版本

我们推荐使用最新版本的 Python 。 Flask 支持 Python 3.8 以上版本。当然尽管目前最新的Python版本已经到了Python3.12,不过我目前使用的是Python3.11。我15年用的Flask使用的是Python2,时间过得很快,Python发展得也很快。

图片

依赖

当安装 Flask 时,以下配套软件会被自动安装。

Werkzeug用于实现 WSGI ,应用和服务之间的标准 Python 接口。这块的内容将在公众号CTO Plus后面的文章《深入介绍Werkzeug以及实战应用》中做详细讲解,敬请关注。

Jinja用于渲染页面的模板语言。这块的内容将在公众号CTO Plus后面的文章《深入介绍Jinja以及实战应用》中做详细讲解,敬请关注。

MarkupSafe与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注 入攻击。这块的内容将在公众号CTO Plus后面的文章《深入介绍MarkupSafe以及实战应用》中做详细讲解,敬请关注。

ItsDangerous保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie。这块的内容将在公众号CTO Plus后面的文章《深入介绍ItsDangerous以及实战应用》中做详细讲解,敬请关注。

Click是一个命令行应用的框架。用于提供 flask 命令,并允许添加 自定义管理命令。这块的内容将在公众号CTO Plus后面的文章《深入介绍Click以及实战应用》中做详细讲解,敬请关注。

Blinker提供对于 信号 的支持。这块的内容将在公众号CTO Plus后面的文章《实时通信:Flask中的Blinker信号机制解析》中做详细讲解,敬请关注。

可选依赖

以下配套软件不会被自动安装。如果安装了,那么 Flask 会检测到这些软件。

python-dotenv当运行 flask 命令时为 通过 dotenv 设置环境变量 提供支持。

Watchdog为开发服务器提供快速高效的重载。

greenlet

你可以选择使用gevent 或者eventlet来服务你的应用。在这种情况下, greenlet>=1.0 是必须的。当使用 PyPy 时, PyPy>=7.3.7 是必须的。关于gevent 和eventlet的详细介绍和使用请公众号公众号CTO Plus参考后面的文章:

上述版本是指支持的最小版本,应当尽量使用最新的版本。

虚拟环境

建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖。

为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要不同版本的Python库。同一个 Python库的不同版本可能不兼容。

虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的Python库,也可以隔离项目与操作系统之间的 Python 库。

其中Python 内置了用于创建虚拟环境的 venv 模块。

Python提供了好几种虚拟环境,关于虚拟环境的使用和介绍,可以参考公众号CTO Plus前面的文章:《Python3的虚拟环境管理神器之pipenv、virtualenv、virtualenvwrapper详解》和《Python3的虚拟环境管理和包管理器PIP的详细介绍和使用》。

创建一个虚拟环境

创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 .venv 文件夹:

mkdir myproject

cd myproject

python3 -m venv .venv

激活虚拟环境

在开始工作前,先要激活相应的虚拟环境:

. .venv/bin/activate

激活后,你的终端提示符会显示虚拟环境的名称。

安装 Flask

在已激活的虚拟环境中可以使用如下命令安装 Flask:

安装:使用pip命令安装Flask库:pip install flask

到此,Flask 现在已经安装完毕。

一个最小的应用

一个最小的 Flask 应用如下:



# 导入Flask类from flask import Flask
# 创建应用# Flask类的一个对象是我们的WSGI应用程序。# Flask构造函数使用当前模块(__name __)的名称作为参数app = Flask(__name__)
# 定义路由:使用装饰器来定义URL路由和对应的处理函数@app.route("/hello_world")def hello_world(): return "<p>Hello, SteveRocket</p>"
if __name__ == "__main__": # 运行应用:在Python文件中添加如下代码,以运行Flask应用 # debug 开启调试模式 # threaded 开启多线程    app.run(host="0.0.0.0", port=80, debug=True, threaded=True)

那么,这些代码是什么意思呢?

首先我们导入了 Flask 类。该类的实例将会成为我们的WSGI应用。关于WSGI的详细介绍和使用可以关注公众号CTO Plus后面的文章:《深入介绍WSGI与uWSGI以及实战应用》

接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。 __name__ 是一个适用于大多数情况的快捷方式。有了这个参数,Flask才能知道在哪里可以找到模板和静态文件等东西。关于模板和静态文件的内容请参考公众号CTO Plus后面的文章《美化你的应用:Flask中的灵活模板渲染》和《提升用户体验:Flask中的静态文件处理技巧》,敬请关注。

然后我们使用 route() 装饰器来告诉Flask 触发函数的URL。

函数返回需要在用户浏览器中显示的信息。默认的内容类型是 HTML ,因此 字符串中的 HTML 会被浏览器渲染。

把它保存为一个练习的代码文件 practice1.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。

可以使用 flask 命令或者 python -m flask 来运行这个应用,或者IDE开发工具。你需要使用 --app 选项告诉 Flask 哪里可以找到应用。

使用Flask命令启动应用

$ flask --app practice1 run

* Serving Flask app 'hello'

* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

图片

使用python -m命令启动应用

图片

使用IDE 的Python直接启动Flask服务

图片

启动的服务端口默认是5000,启动的服务端口默认是5000,并开启了开发模式和调试模式

图片

应用发现行为

作为一个捷径,如果文件名为 app.py 或者 wsgi.py ,那么你不需要使用 --app 。详见公众号CTO Plus后面的文章《命令行的魔力:Flask中的命令行接口技巧》。

这样就启动了一个非常简单的内建的服务器。这个服务器用于测试应该是足够了,但是用于生产可能是不够的。关于部署的有关内容,请参见公众号CTO Plus后面的文章《从开发到部署:Flask应用的生产环境部署与可安装化》。

现在在浏览器中打开 http://127.0.0.1:5000/ ,可以看到Hello, SteveRocket字样。

图片

如果其他程序已经占用了 5000 端口,那么在尝试启动服务器时会看到 OSError: [Errno 98] 或者 OSError: [WinError 10013] , 如何解决这个问题,可以关注公众号CTO Plus,后面的文章《快速迭代开发:Flask中的开发服务器实践》将详细介绍地址已被占用这个问题的解决方法。

更多关于Flask相关的技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

外部可见的服务器

运行服务器后,会发现只有你自己的电脑可以使用服务,而网络中的其他电 脑却不行。缺省设置就是这样的,因为在调试模式下该应用的用户可以执行 你电脑中的任意 Python 代码。

如果你关闭了调试器或信任你网络中的用户,那么可以让服务器被公开访问。只要在命令行上简单的加上 --host=0.0.0.0 即可:

$ flask run --host=0.0.0.0

这行代码告诉你的操作系统监听所有公开的IP 。

调试模式

flaskrun 命令不只可以启动开发服务器。如果你打开调试模式,那么服 务器会在修改应用代码之后自动重启,并且当请求过程中发生错误时还会在浏览器中提供一个交互调试器。

图片

调试器允许执行来自浏览器的任意 Python 代码。虽然它由一个 pin 保护, 但仍然存在巨大安全风险。不要在生产环境中运行开发服务器或调试器。

如果要打开调试模式,请使用 --debug 选项。

$ flask --app hello run --debug

* Serving Flask app 'hello'

* Debug mode: on

* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

* Restarting with stat

* Debugger is active!

* Debugger PIN: nnn-nnn-nnn

到此,相信你已经对Flask已经简单的入门了。

更多精彩,关注我公号,一起学习、成长

图片

更多精彩,关注我公号,一起学习、成长

图片

推荐阅读:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值