Flask 框架(一):核心特性与基础配置

目录

一、为什么选择 Flask?

二、Flask 核心概念与初始化

2.1 程序实例初始化

2.2 运行配置:app.run () 参数详解

2.3 应用配置:三种参数设置方式

1. 字典直接配置(简单临时场景)

2. 配置文件导入(生产级安全)

3. 类继承配置(复杂项目首选)

三、路由与视图:Flask 的核心交互逻辑

3.1 基础路由定义

3.2 路由高级特性

动态参数传递

路由反向解析

四、请求与响应:数据交互基础

4.1 获取请求数据

4.2 构建响应内容

小结


在 Python Web 开发领域,Flask 以其轻量、灵活的特性占据了重要地位。对于追求极简开发体验或需要高度定制化的项目来说,Flask 无疑是绝佳选择。本文将从 Flask 的核心特性出发,详解其基础配置与核心概念,帮助初学者快速入门。

一、为什么选择 Flask?

Web 开发涉及网络通信、数据库交互、会话管理等众多基础工作,直接从零开发不仅效率低下,还容易引入 bug。使用 Web 框架的核心价值在于 “避免重复造轮子”—— 框架处理底层逻辑,开发者专注业务实现。

与 Django 等 “全栈框架” 相比,Flask 的特点尤为突出:

  • 轻量级:仅保留核心功能(路由、视图、模板渲染),无强制依赖
  • 高可定制:通过第三方扩展实现功能扩展(如数据库、表单验证等)
  • 核心依赖:基于 Werkzeug(HTTP 工具集)和 Jinja2(模板引擎)构建,兼顾性能与灵活性

适合场景:小型应用、API 服务、快速原型开发,或需要深度定制架构的项目。

二、Flask 核心概念与初始化

2.1 程序实例初始化

Flask 应用的起点是创建Flask对象,其初始化参数决定了项目的基础结构:

from flask import Flaskapp = Flask(import_name=__name__,  # 必传,通常为__name__,决定静态文件路径static_url_path='/static',  # 静态文件访问URL前缀,默认'/static'static_folder='static',  # 静态文件存储目录,默认'static'template_folder='templates'  # 模板文件存储目录,默认'templates'
)

参数说明

  • import_name:用于定位项目根目录,传入__name__即可满足绝大多数场景。
  • 静态文件访问规则:默认通过http://域名/static/文件名访问,修改static_url_pathstatic_folder后需对应调整路径。

示例:若将静态目录改为assets,访问路径需改为/static/文件名static_url_path默认值),但实际文件存储在assets文件夹中。

2.2 运行配置:app.run () 参数详解

创建实例后,通过app.run()启动服务,常用参数如下:

app.run(host="0.0.0.0",  # 允许外部访问(默认仅本地127.0.0.1)port=5000,  # 端口号,默认5000debug=True  # 调试模式开关
)

其中,debug=True(调试模式)是开发阶段的 “利器”,开启后:

  • 代码修改后自动重启服务,无需手动重启
  • 错误发生时,前端直接显示详细堆栈信息(生产环境必须关闭,避免泄露敏感信息

2.3 应用配置:三种参数设置方式

Flask 的配置参数(如数据库地址、密钥等)可通过多种方式设置,适用于不同场景:

1. 字典直接配置(简单临时场景)

直接通过app.config字典修改,适合快速测试:

app.config['DEBUG'] = True  # 开启调试模式
app.config['SECRET_KEY'] = 'dev_key'  # 会话加密密钥(开发环境临时值)
2. 配置文件导入(生产级安全)

将配置写入独立文件(如config.py),通过from_pyfile导入,避免敏感信息硬编码:

# config.py
DEBUG = False
SECRET_KEY = 'your_secure_key'
SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@localhost/db'# 应用中导入
app.config.from_pyfile('config.py')
3. 类继承配置(复杂项目首选)

通过类定义配置,支持继承与环境区分(如开发 / 生产环境):

class BaseConfig:SECRET_KEY = 'shared_key'SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevConfig(BaseConfig):DEBUG = TrueSQLALCHEMY_DATABASE_URI = 'mysql://root:dev_pass@localhost/dev_db'class ProdConfig(BaseConfig):DEBUG = FalseSQLALCHEMY_DATABASE_URI = 'mysql://user:prod_pass@localhost/prod_db'# 根据环境选择配置
app.config.from_object(DevConfig)  # 开发环境
# app.config.from_object(ProdConfig)  # 生产环境

三、路由与视图:Flask 的核心交互逻辑

路由与视图是 Flask 处理用户请求的核心机制:路由定义 URL 规则,视图函数处理业务逻辑并返回响应

3.1 基础路由定义

通过@app.route装饰器定义路由,语法简洁直观:

@app.route('/')  # 根路径
def index():return 'Hello, Flask!'  # 返回字符串响应

  • 指定 HTTP 方法:默认仅支持GET,通过methods参数扩展:

    @app.route('/login', methods=['GET', 'POST'])
    def login():if request.method == 'GET':return '登录页面'else:return '处理登录请求'
    
  • 查看项目路由:通过flask routes命令或代码遍历查看所有路由:

    for rule in app.url_map.iter_rules():print(f"URL: {rule.rule}, 方法: {rule.methods}, 视图: {rule.endpoint}")
    

3.2 路由高级特性

动态参数传递

支持在 URL 中嵌入参数(如用户 ID),并指定类型(int/float/string):

@app.route('/user/<int:user_id>')  # 仅匹配整数ID
def user_detail(user_id):return f"用户ID: {user_id}"  # 参数直接传入视图函数
路由反向解析

使用url_for根据视图函数名生成 URL,避免硬编码路径(尤其适合动态路由):

from flask import url_for, redirect@app.route('/profile')
def profile():return '个人主页'@app.route('/redirect-to-profile')
def redirect_demo():# 反向解析profile视图的URL(此处为'/profile')profile_url = url_for('profile')return redirect(profile_url)  # 重定向到个人主页

四、请求与响应:数据交互基础

Flask 通过request对象获取客户端数据,通过多种方式返回响应,满足不同场景需求。

4.1 获取请求数据

request对象封装了 HTTP 请求细节,需从flask导入:

from flask import request@app.route('/submit', methods=['GET', 'POST'])
def submit():# 获取GET参数(?name=xxx&age=18)name = request.args.get('name', '匿名')  # 第二个参数为默认值# 获取POST表单数据(Content-Type: application/x-www-form-urlencoded)if request.method == 'POST':email = request.form.get('email')# 获取JSON数据(Content-Type: application/json)json_data = request.get_json()  # 解析JSON为字典return f"Hello, {name}!"

4.2 构建响应内容

Flask 支持多种响应类型,覆盖常见 Web 场景:

  1. 字符串响应:直接返回文本(默认text/html类型)

    return '简单文本'
    
  2. 模板渲染:通过render_template返回 HTML 页面(需配合templates目录):

    from flask import render_template@app.route('/page')
    def show_page():# 传递变量到模板(templates/page.html)return render_template('page.html', title='Flask页面', content='欢迎访问')
    
  3. JSON 响应:通过jsonify返回 JSON 数据(自动设置Content-Type:application/json):

    from flask import jsonify@app.route('/api/data')
    def api_data():return jsonify(code=200, message='success', data={'key': 'value'})
    
  4. 重定向:通过redirect跳转到其他 URL:

    from flask import redirect
    return redirect('/login')  # 重定向到登录页
    return redirect(url_for('index'))  # 结合反向解析更灵活
    
  5. 自定义响应:通过make_response设置状态码、响应头:

    from flask import make_response@app.route('/custom')
    def custom_response():resp = make_response('自定义响应')resp.status_code = 201  # 状态码(默认200)resp.headers['X-Custom-Header'] = 'flask'  # 自定义响应头return resp
    

小结

本文介绍了 Flask 的核心特性、基础配置、路由视图与数据交互逻辑,覆盖了搭建简单 Web 应用的全部基础。Flask 的设计哲学是 “简约而不简单”—— 看似轻量的框架,却能通过扩展灵活支撑复杂项目。

下一篇将深入讲解 Flask 的高级特性,包括会话管理、模板引擎、数据库交互、表单处理等实战必备技能,帮助你从 “能运行” 提升到 “能落地”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915421.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

社交圈子系统开源社交源码 / 小程序+H5+APP 多端互通的底层技术分析

伴随社交产品向“圈子化”、“内容驱动”发展方向演进&#xff0c;打造一套支持小程序、H5、APP 互通的社交圈子系统&#xff0c;已经成为构建垂直社区的基础架构能力要求。本文围绕一套典型的多端社交兴趣平台&#xff08;即友猫社区平台&#xff09;的设计实践&#xff0c;对…

gitlab-runner配置问题记录

引言 笔者曾通过2种方式部署过 gitlab-runner&#xff0c;在 gitlab 中使用这个 runner 拉起 ci job 的过程中或多或少遇到些问题&#xff0c;主要都是 job 中无法访问宿主机的docker 等组件。本篇文档主要记录 gitlab-runner 安装及相关配置。 二进制部署 gitlab-runner 部署 …

每日面试题10:令牌桶

令牌桶算法&#xff1a;优雅的流量控制艺术在现代分布式系统中&#xff0c;流量控制如同交通信号灯般重要——它既不能让请求"堵死"系统&#xff0c;也不能放任流量"横冲直撞"。令牌桶算法&#xff08;Token Bucket Algorithm&#xff09;正是这样一种精妙…

【java】消息推送

文章目录Java网页消息推送解决方案 短轮询、长轮询、SSE、Websocket

STM32 | 有源蜂鸣器响,无源蜂鸣器播音乐

目录 Overview 有源蜂鸣器 无源蜂鸣器 有源蜂鸣器控制 GPIO配置 控制程序 无源蜂鸣器控制 反转GPIO控制 GPIO配置 控制接口 PWM控制 GPIO配置 控制函数 改变频率播音乐 原理 1. 频率决定音调 2. 占空比决定音量 GPIO初始化 结构体定义和音符频率表 播放接口 …

第十四章 gin基础

文章目录Gin快速搭建一个web服务Gin数据交互JSON串内容规范Gin使用结构体返回数据给前端Gin配置POST类型的路由Gin获取GET请求参数Gin获取POST请求参数-form-data类型Gin获取POST请求参数-JSON类型Gin获取参数绑定至结构体Gin快速搭建一个web服务 下载包 \\新建一个文件&…

Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现PCB的缺陷检测(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现PCB的缺陷检测&#xff08;C#代码&#xff0c;UI界面版&#xff09;工业相机使用YoloV8模型实现PCB的缺陷检测工业相机实现YoloV8模型实现PCB的缺陷检测的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图…

【Vivado那些事儿】AMD-XILINX 7系列比特流加密

前提&#xff1a;加密有风险&#xff0c;操作需谨慎前言在许多项目中&#xff0c;经过漫长的等待&#xff0c;我们的 FPGA 设计终于可以投入现场部署了。前期的资金的投入及知识产权的保护&#xff0c;我们需要对现场部署的 FPGA 进行比特流保护以防止逆向工程和未经授权的重复…

RK3588 安卓adb操作

adb&#xff08;Android Debug Bridge&#xff09;是一个用于与安卓设备进行通信和控制的工具。adb可以通过USB或无线网络连接安卓设备&#xff0c;执行各种命令&#xff0c;如安装和卸载应用&#xff0c;传输文件&#xff0c;查看日志&#xff0c;运行shell命令等。adb是安卓开…

【华为机试】70. 爬楼梯

文章目录70. 爬楼梯描述示例 1示例 2提示解题思路核心分析问题建模算法实现方法1&#xff1a;动态规划&#xff08;标准解法&#xff09;方法2&#xff1a;空间优化动态规划&#xff08;最优解&#xff09;方法3&#xff1a;递归 记忆化方法4&#xff1a;数学公式&#xff08;…

山东大学软件学院面向对象期末复习

面向对象 文章目录面向对象04 类封装接口 抽象类05 消息&#xff0c;实例化&#xff0c;静态变量方法消息动/静态类型语言对象创建类及实例具有下面特征对象数组的创建静态数据成员构造函数06_0 继承继承是向下传递的JAVA为什么不支持多重继承继承的形式特殊化继承替换原则规范…

让 Windows 用上 macOS 的系统下载与保姆级使用教程

模拟苹果桌面软件下载&#xff1a;https://xpan.com.cn/s/8NFAGT 还记得 Windows 11刚发布时&#xff0c;很多人就说“果里果气"的&#xff0c;但界面确实做的漂亮。 不知道现在有多少小伙伴正用着macOS&#xff0c;不过我敢确定&#xff0c;喜欢macOS的人绝对不少&#…

嵌入式硬件篇---继电器

继电器是一种通过小电流控制大电流的电磁开关&#xff0c;广泛应用于自动化控制、电力系统和电子设备中。以下从工作原理、应用场景和电路特点三个方面详细介绍&#xff1a;一、工作原理继电器本质是电磁控制的机械式开关&#xff0c;核心部件包括&#xff1a;线圈&#xff08;…

鸿蒙网络编程系列58-仓颉版TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的签名验证是网络编程中一个重要的功能&#xff0c;它保证了数字证书是由可信任的签发方签署的&#xff0c;在此基础上&#xff0c;我们才可以信任该证书&#xff0c;进而信任基于该证书建立的安全通道&#xff0c;所以说&#xff0c;数字证书…

【React Native】安装配置 Expo Router

过去开发React Native&#xff0c;所使用的路由都是React Navigation。但是这个东西使用起来非常困难&#xff0c;配置无比繁琐。Expo&#xff0c;为了简化操作&#xff0c;就基于React Navigation开发了Expo Router。 Expo Router用起来就要简单的多了&#xff0c;配置也相对…

美国VPS服务器Linux内核参数调优的实践与验证

美国vps服务器Linux内核参数调优的实践与验证在云计算和虚拟化技术日益普及的今天&#xff0c;美国VPS服务器因其稳定的网络环境和优越的性价比&#xff0c;成为众多企业和开发者的首选。Linux内核参数的默认配置往往无法充分发挥VPS的性能潜力。本文将深入探讨美国VPS服务器上…

在Vscode中使用Kimi K2模型:实践指南,三分钟生成个小游戏

Kimi K2是一款基于多专家&#xff08;MoE&#xff09;架构的强大代码与代理能力基础模型。本文将通过在VS Code及其扩展Cline和RooCode中的实际应用&#xff0c;详细说明如何使用Kimi K2-0711-preview模型。不得不说kimi这次的K2模型就是强大&#xff0c;在vscode中配置使用体验…

基于SpringBoot+Uniapp球场预约小程序(腾讯地图API、Echarts图形化分析、二维码识别)

“ &#x1f388;系统亮点&#xff1a;腾讯地图API、Echarts图形化分析、二维码识别”01系统开发工具与环境搭建前后端分离架构 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17前端&#xff1a; 技术&#xff1a;框架Vue.js&#xff1b;UI库&#xff1a;…

windows + phpstorm 2024 + phpstudy 8 + php7.3 + thinkphp6 配置xdebug调试

windows phpstorm 2024 phpstudy 8 php7.3 thinkphp6 配置xdebug调试 下载配置phpstudyPhp.ini配置phpstorm配置xdebug运行一会就停了配置虚拟机 0localhost_90.conf 配置php.ini配置下载 在下面地址下载合适的xdebug 放到对应的php https://xdebug.org/wizard 配置phpst…

python的pywebview库结合Flask和waitress开发桌面应用程序简介

pywebview的用途与特点 用途 pywebview是一个轻量级Python库&#xff0c;用于创建桌面应用程序&#xff08;GUI&#xff09;。它通过嵌入Web浏览器组件&#xff08;如Windows的Edge/IE、macOS的WebKit、Linux的GTK WebKit&#xff09;&#xff0c;允许开发者使用HTML/CSS/Java…