当前位置: 首页 > ai >正文

Flask框架

目录

一:Flask 框架概述

1.安装Flask

2.Flask路由与视图函数

3.Flask表单处理与用户输入

4.Flask的项目结构与部署


前言

Flask 是一个轻量级的 web 框架,基于 Python 语言开发,设计理念注重简洁、灵活和易用。Flask作为一个“微框架”,本身非常简洁,提供了构建 web 应用所需的核心工具,但并不强制开发者遵循复杂的项目结构,因此被广泛应用于 web 开发领域。

Flask 非常适合初学者学习 web 开发,因为它让开发者能够专注于应用逻辑,而无需过多担心框架本身的复杂性。无论是快速原型开发,还是较小规模的 web 应用,Flask 都能提供足够的支持。本文将逐步介绍 Flask框架的基本用法,从基础概念、核心功能到如何创建一个简单的 web 应用,帮助你快速入门Flask。

一:Flask 框架概述

Flask 作为一个微框架,强调简单性和灵活性。它依赖于两个重要的 Python 库来提供核心功能:

  • Werkzeug:这是 Flask 的底层库,提供了 WSGI 接口、HTTP 请求和响应处理、路由等核心功能。
  • Jinja2:一个功能强大的模板引擎,用于动态生成 HTML 页面。

Flask 的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复杂的功能,Flask 的核心本身已经足够满足需求。如果你需要更多高级特性,可以通过 Flask 的扩展库进行补充。

1.安装Flask

(1)创建第一个Flask应用

Flask 的应用结构非常简单,只需创建一个 Python 文件,并通过 Flask()类来实例化应用对象。以下是一个最简单的 Flask 应用示例:

代码解析:

  • Flask(_name ):创建 Flask 应用实例,_name_参数用于 Flask 了解当前模块的名称,通常我们使用这个参数来帮助 Flask 在不同模块间进行配置。
  • @app.route('/'):定义路由和视图函数的映射。'/'是根路径,当用户访问根 URL 时,Flask会调用 hello world()函数。
  • return'Hello,world!:视图函数返回一个简单的字符串响应,Flask 会将其作为 HTTP 响应返回给客户端。
  • app.run(debug=True):启动Flask开发服务器,debug=True 表示启用调试模式,这样可以在开发过程中自动重载应用,并在发生错误时显示详细信息。

(2)运行Flask应用

保存上述代码为 app.py,然后在命令行中运行:

这时 Flask 会启动一个开发服务器,默认会监听 127.0.0.1:5000。打开浏览器,访问http://127.0.0.1:5000/,你会看到“Hello,World!”的页面。

2.Flask路由与视图函数

Flask 的核心之一就是路由系统,它将用户访问的 URL 与对应的视图函数相连接。Flask 通过装饰器@app.route()来定义路由,而视图函数则负责处理用户的请求并返回响应。

(1)动态路由

Flask 支持动态路由参数,可以通过 URL 中的动态部分来获取数据。以下是一个示例:

代码解释:

  • <name>:这是一个动态路由参数,Flask 会提取 URL 中的 name 部分并将其传递给视图函数。
  • 当用户访问/greet/John 时,name 的值将为 John,返回的响应为 Hello,John!。

(2)支持多种 HTTP 请求方法

Flask 不仅支持 GET 请求,还支持其他常见的 HTTP 请求方法,如 POST、PUT、DELETE 等。你可以通过methods 参数来指定允许的请求方法:

代码解析:

  • methods=['POST']:只允许 POST 请求访问此路由。如果用户通过 GET 请求访问,Flask 会返回405 Method Not Allowed 错误。

(3)使用 Jinja2 模板渲染 HTML

Flask 结合 Jinja2 模板引擎来动态生成 HTML 页面。你可以将 HTML 文件与 Python 代码分离,保持应用结构清晰。在 Flask 中,模板文件默认存放在 templates 文件夹中。

假设我们有一个名为 greet.html 的模板文件,内容如下:

在 Flask 应用中,我们可以通过 render template 函数渲染模板并传递动态数据:

代码解析:

  • render template('greet.html',name=name):Flask会加载 greet.html 模板,并将 name的值传递给模板。模板中的{{name }}会被替换为传入的值。

(4)模块继承与块

Flask 文持模板继承和块(Block)功能,这对于构建复杂页面非常有用。你可以在基础模板中定义通用的布局结构,在子模板中覆盖特定的部分。

基础模板 base.html:

子模版 index.html:

代码解析:

  • {% extends'base.htm1'%}:子模板继承了 base,htm1 模板。
  • {% block title %}Home{% endblock %}:覆盖父模板中的 title 块。
  • {% block content %}:定义页面的主要内容区域。

只使用基础模板:

启用子模板后:

3.Flask表单处理与用户输入

Flask 可以通过表单来获取用户输入,常见的做法是结合 Flask-WTF 扩展来简化表单处理和验证。

Flask-WTF为Flask 提供了一个表单类,你可以在表单类中定义字段和验证规则。

(1)安装 Flask-WTF

(2)创建一个简单的表单

代码解析:

  • FlaskForm:继承自 FlaskForm 类,定义表单字段。
  • StringField('Name',validators=[DataRequired()]):定义了一个文本输入字段,并且通
    过 DataRequired()验证器确保字段不能为空。
  • form.validate on submit():检査表单是否通过验证并被提交。

index.html 模板:

表单验证

Flask 表单处理的强大之处在于它的验证机制。通过 wtforms,你可以非常方便地为表单字段添加各种验证规则。比如,除了 DataRequired(),你还可以使用:

  • Length(min=2,max=50):验证输入的长度
  • Email():验证输入是否是有效的邮箱地址。
  • EqualTo('password'):验证两个字段的值是否相等

4.Flask的项目结构与部署

(1)项目结构

随着应用的复杂度增加,Flask 应用的结构通常会发生变化。一个典型的Flask 项目结构如下:

  •  /templates:存放所有 HTML 模板文件。
  • /static:存放静态文件(如CSS、JS、图片等)。
  • __init__·py:初始化 Flask 应用。
  • routes.py:定义所有路由和视图函数。
  • forms.py:定义表单类。

(2) 部署 Flask 应用

Flask 应用的开发环境通常使用 Flask run 启动,但在生产环境中,我们需要通过更强大的 web 服务器进行部署,常见的有:

  • Gunicorn:一个 Python WSGI HTTP 服务器,常用于生产环境部署
  • Nginx:作为反向代理,前端处理静态文件请求,转发动态请求到Flask 应用。部署时,可以通过以下命令启动 Flask应用:

http://www.xdnf.cn/news/8296.html

相关文章:

  • DeepSeek 赋能智能电网:从技术革新到全场景应用实践
  • Android 直接通过 app_process 启动的应用如何使用 Context
  • 3362. 零数组变换 III
  • PPP 拨号失败:ATD*99***1# ... failed
  • 610Hz!无惧环境光新薄膜!ROG全新电竞显示器亮相2025台北电脑展
  • 第七部分:第二节 - 在 Node.js 中连接和操作 MySQL:厨房与仓库的沟通渠道
  • STM32:深度解析RS-485总线与SP3485芯片
  • QT聊天项目DAY12
  • 科技成果鉴定测试怎么进行?进行鉴定测试有什么好处
  • 精准核验,实时响应-身份证实名认证接口-身份证二要素核验
  • 基于 SpringBoot + Vue 的海滨体育馆管理系统设计与实现
  • Golang基于 Swagger + JWT + RBAC 的认证授权中间件设计
  • VSCode+EIDE通过KeilC51编译,使VSCode+EIDE“支持”C和ASM混编
  • 可视化图解算法44:旋转数组的最小数字
  • Vue 3 实现 Excel 表格解析的完整指南
  • QGIS如何打开 ARCGIS的mxd工程文件
  • 【八股战神篇】RabbitMQ高频面试题
  • 架空线路监控系统是针对高压架空输电线路设计的一种安全监测解决方案
  • 1536. 【中山市第十一届信息学邀请赛决赛】同质(same)
  • Python邮件处理:POP与SMTP
  • Flask-SQLAlchemy数据库查询:query
  • Linux(5)——再谈操作系统
  • HOW - 基于组件库组件改造成自定义组件基本规范
  • JavaScript- 1.6 基本控制流
  • 【瑞数3代】药监评审中心逆向分析 | 后缀MmEwMD参数
  • 采用多维计算策略(分子动力学模拟+机器学习),显著提升 α-半乳糖苷酶热稳定性
  • ArcGIS Pro 3.4 二次开发 - 地理数据库
  • Java多线程同步:确保并发安全的关键策略
  • Redis删除策略
  • gitlab占用内存 优化