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

flask框架基础入门学习教程

文章目录

  • 前言
  • 1. 环境搭建
    • 1.1Python安装
    • 1.2选择Python开发环境
    • 1.3 创建虚拟环境(可选但推荐)
    • 1.4 安装 Flask
  • 2. 第一个 Flask 应用
  • 3. 路由和视图函数
    • 3.1 基本路由
    • 3.2 动态路由
    • 3.3 路由参数类型
  • 4. 请求和响应
    • 4.1 获取请求数据
    • 4.2 响应对象
  • 5. 模板渲染
  • 6. 静态文件处理
  • 7. 会话管理
  • 8. 错误处理
  • 9. 数据库集成
  • 10. 部署


前言

Flask 是一个轻量级的 Python Web 框架,它简单易用,适合初学者和快速开发小型 Web 应用。以下是一份较为全面的 Flask 框架教程:


1. 环境搭建

1.1Python安装

访问 Python 官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载并安装 Python 3.x 版本。安装时勾选 “Add Python to PATH”,方便在命令行中使用 Python。

Python 3.7安装教程:https://blog.csdn.net/u014164303/article/details/145620847
Python 3.9安装教程:https://blog.csdn.net/u014164303/article/details/145570561
Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489

Python 3.7下载地址:https://pan.quark.cn/s/8268bf81f31f
Python 3.9下载地址:https://pan.quark.cn/s/9711a93276ad
Python 3.11下载地址:https://pan.quark.cn/s/9c44793cb24c

1.2选择Python开发环境

PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。

Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a

1.3 创建虚拟环境(可选但推荐)

虚拟环境可以隔离不同项目的依赖,避免版本冲突。在命令行中执行以下操作:

# 创建虚拟环境
python -m venv myenv# 激活虚拟环境(Windows)
myenv\Scripts\activate# 激活虚拟环境(Linux/Mac)
source myenv/bin/activate

1.4 安装 Flask

在激活的虚拟环境中,使用 pip 安装 Flask:
bash
pip install flask

2. 第一个 Flask 应用

创建一个名为 app.py 的文件,编写以下代码:

from flask import Flask# 创建 Flask 应用实例
app = Flask(__name__)# 定义路由和视图函数
@app.route('/')
def hello_world():return 'Hello, World!'if __name__ == '__main__':# 启动应用app.run(debug=True)

在命令行中运行该文件:

python app.py

打开浏览器,访问 http://127.0.0.1:5000,你将看到页面显示 Hello, World!。

3. 路由和视图函数

3.1 基本路由

Flask 使用 @app.route() 装饰器来定义路由,将 URL 与视图函数关联起来。

@app.route('/about')
def about():return 'This is the about page.'

访问 http://127.0.0.1:5000/about 即可看到相应的页面内容。

3.2 动态路由

可以在路由中使用变量,通过 <variable_name> 的形式定义,视图函数可以接收该变量作为参数。

@app.route('/user/<username>')
def show_user_profile(username):return f'User: {username}'

访问 http://127.0.0.1:5000/user/John,页面将显示 User: John。

3.3 路由参数类型

可以指定变量的类型,如 int、float 等。

@app.route('/post/<int:post_id>')
def show_post(post_id):return f'Post ID: {post_id}'

访问 http://127.0.0.1:5000/post/123,页面将显示 Post ID: 123。

4. 请求和响应

4.1 获取请求数据

Flask 使用 request 对象来处理请求数据,如表单数据、查询参数等。

from flask import request@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form.get('username')password = request.form.get('password')return f'Username: {username}, Password: {password}'return '''<form method="post"><label for="username">Username:</label><input type="text" id="username" name="username"><br><label for="password">Password:</label><input type="password" id="password" name="password"><br><input type="submit" value="Login"></form>'''

4.2 响应对象

可以使用 make_response() 函数创建自定义响应对象,设置响应头、状态码等。

from flask import make_response@app.route('/custom_response')
def custom_response():resp = make_response('This is a custom response')resp.headers['Content-Type'] = 'text/plain'resp.status_code = 201return resp

5. 模板渲染

Flask 使用 Jinja2 模板引擎来渲染 HTML 页面。创建一个名为 templates 的文件夹,在其中创建一个 index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Home Page</title>
</head>
<body><h1>Welcome to the Home Page!</h1><p>Message: {{ message }}</p>
</body>
</html>

在 app.py 中使用 render_template() 函数渲染模板:

from flask import render_template@app.route('/home')
def home():message = 'Hello from the server!'return render_template('index.html', message=message)

6. 静态文件处理

创建一个名为 static 的文件夹,用于存放静态文件,如 CSS、JavaScript 和图片等。在 HTML 模板中引用静态文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Home Page</title><link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body><h1>Welcome to the Home Page!</h1>
</body>
</html>

7. 会话管理

Flask 使用 session 对象来管理用户会话。需要设置一个会话密钥:

from flask import sessionapp.secret_key = 'your_secret_key'@app.route('/set_session')
def set_session():session['username'] = 'John'return 'Session set'@app.route('/get_session')
def get_session():username = session.get('username')if username:return f'Username: {username}'return 'No session data'

8. 错误处理

可以使用 @app.errorhandler() 装饰器来处理特定的错误。

@app.errorhandler(404)
def page_not_found(error):return 'Page not found', 404

9. 数据库集成

Flask 可以与多种数据库集成,如 SQLite、MySQL、PostgreSQL 等。以 SQLite 为例,使用 Flask - SQLAlchemy 进行数据库操作:

pip install flask-sqlalchemy

from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)def __repr__(self):return '<User %r>' % self.username@app.before_first_request
def create_tables():db.create_all()@app.route('/add_user/<username>')
def add_user(username):new_user = User(username=username)db.session.add(new_user)db.session.commit()return f'User {username} added'if __name__ == '__main__':app.run(debug=True)

10. 部署

  • 开发完成后,可以将 Flask 应用部署到生产环境,常见的部署方式有:
  • WSGI 服务器:如 Gunicorn(适用于 Linux)、uWSGI 等。
  • 云平台:如 Heroku、阿里云、腾讯云等。

通过以上步骤,你可以逐步掌握 Flask 框架的基本使用,开发出功能丰富的 Web 应用。

相关文章:

flask框架基础入门学习教程

文章目录 前言1. 环境搭建1.1Python安装1.2选择Python开发环境1.3 创建虚拟环境&#xff08;可选但推荐&#xff09;1.4 安装 Flask 2. 第一个 Flask 应用3. 路由和视图函数3.1 基本路由3.2 动态路由3.3 路由参数类型 4. 请求和响应4.1 获取请求数据4.2 响应对象 5. 模板渲染6.…...

Qt显示一个hello world

一、显示思路 思路一&#xff1a;通过图形化方式&#xff0c;界面上创建出一个控件显示。 思路二&#xff1a;通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;显示 hello world 即可。 qmake 基于 .…...

MySQL快速搭建主从复制

一、基于位点的主从复制部署流程 确定主库Binlog是否开启修改主从server_id主库导出数据从库导入数据确定主库备份时的位点在从库配置主库信息查看复制状态并测试数据是否同步 二、准备阶段(主库和从库配置都需要修改&#xff09; 1、确定主库Binlog是否开启 2、修改主从se…...

力扣-动态规划-674 最长连续递增序列

思路 dp数组定义&#xff1a;以i为结尾的最长连续递增序列递推公式&#xff1a; if(nums[i-1] < nums[i]) dp[i] dp[i-1] 1; dp数组初始化&#xff1a;都为1遍历顺序&#xff1a;顺序时间复杂度&#xff1a; 代码 class Solution { public:int findLengthOfLCIS(v…...

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…...

leetcode 94. 二叉树的中序遍历

题目如下 做了那么多道难题&#xff0c;给自己放放松。通过代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

YOLOv12:目标检测新时代的破局者

目录 一、YOLOv12 横空出世二、YOLOv12 的性能飞跃2.1 多规模优势2.2 对比超越 三、技术创新与原理剖析3.1 区域注意力模块&#xff08;Area Attention&#xff0c;A2&#xff09;3.2 残差高效层聚合网络&#xff08;R-ELAN&#xff09;3.3 架构优化细节 四、实验验证与结果分析…...

基于OFDR的层压陆相页岩油储层中非对称裂缝群传播的分布式光纤监测

关键词&#xff1a;OFDR、分布式光纤传感、裂缝传播 一. 概述 四川盆地凉高山组优质页岩油储层存在复杂的垂直重叠岩性&#xff0c;大陆页岩油储层存在发育层理&#xff0c;薄层和天然裂缝&#xff0c;对水平井多级压裂技术的裂缝网络形态控制和监测构成挑战。本研究提出了一…...

Linux虚拟机网络配置-桥接网络配置

简介 本文档旨在指导用户如何在虚拟环境中配置Linux系统的桥接网络&#xff0c;以实现虚拟机与物理主机以及外部网络的直接通信。桥接网络允许虚拟机如同一台独立的物理机一样直接连接到物理网络&#xff0c;从而可以被分配一个独立的IP地址&#xff0c;并能够与网络中的其他设…...

软开经验总结

文章目录 软开经验总结一、二次开发时候操作步骤二、logger的作用&#xff01;&#xff01;&#xff01;三、git使用 软开经验总结 一、二次开发时候操作步骤 改 SDK 和 language level改 maven 配置改数据库 注意Mysql 版本 差别是否过大&#xff01;&#xff01;&#xff0…...

关于虚拟环境中遇到的bug

conda和cmd介绍 介绍 Conda 概述&#xff1a; Conda是一个开源包管理系统和环境管理系统&#xff0c;尤其适用于Python和R语言的开发环境。它允许用户创建独立的虚拟环境&#xff0c;方便地管理依赖包和软件版本。 特点&#xff1a; 环境管理&#xff1a;可以创建、导入、导…...

C 语言在微软平台:经典与创新的交融

在编程语言的璀璨星空中&#xff0c;C 语言犹如一颗耀眼的恒星&#xff0c;散发着永恒的光芒。当这颗恒星与微软强大的平台相互辉映时&#xff0c;更是碰撞出了绚丽多彩的火花&#xff0c;构建起了一个充满无限可能的编程世界。 C 语言与微软平台的深厚渊源 C 语言诞生于 20 …...

大数据测试中,数据仓库表类型有哪些?

本文我们一起了解一下数据仓库测试的对象&#xff0c;直白一点讲就是一张表&#xff0c;这张表分为以下几种类型&#xff1a; 全量表&#xff1a;没有分区的表&#xff0c;数据全量更新或者增量合并&#xff0c;我们通常理解就是把这些数据放到了一个文件夹里面。这样会有什么…...

基于开源库编写MQTT通讯

目录 1. MQTT是什么&#xff1f;2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么&#xff1f; MQTT&#xff08;Message Queuing Terlemetry Transport&#xff09;消息队列遥测协议&#xff1b;是…...

Kafka Connect连接器的全生命周期:

以下是基于Vue和PySide2的两种图形化界面设计方案,用于管理Kafka Connect连接器的全生命周期: 方案一:Vue3 Web管理平台 技术栈 - 前端:Vue3 + Element Plus + ECharts - 通信:Axios + WebSocket - 安全:JWT + HTTPS - 打包:Vite + Docker核心功能模块 <!-- 连接器…...

磁盘空间不足|如何安全清理以释放磁盘空间(开源+节流)

背景&#xff1a; 最近往数据库里存的东西有点多&#xff0c;磁盘不够用 查看磁盘使用情况 df -h /dev/sda5&#xff08;根目录 /&#xff09; 已使用 92% 咱们来开源节流 目录 背景&#xff1a; 一、开源 二、节流 1.查找 大于 500MB 的文件&#xff1a; 1. Snap 缓存…...

DeepSeek vs Grok vs ChatGPT:大模型三强争霸,谁将引领AI未来?

DeepSeek vs. Grok vs. ChatGPT&#xff1a;大模型三强争霸&#xff0c;谁将引领AI未来&#xff1f; 在人工智能领域&#xff0c;生成式模型的竞争已进入白热化阶段。DeepSeek、Grok和ChatGPT作为三大代表性工具&#xff0c;凭借独特的技术路径和应用优势&#xff0c;正在重塑…...

2025国家护网HVV高频面试题总结来了04(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 一、HVV行动面试题分类 根据面试题的内容&#xff0c;我们将其分为以下几类&#xff1a; 漏洞利用与攻击技术 …...

我的AI工具箱Tauri版-通用音频转文本

本模块支持FunAsr和FasterWhisper两种模式&#xff0c;可批量处理音频与视频文件&#xff0c;自动生成txt文本与srt字幕&#xff0c;满足多种应用场景需求。 工具内置FunAsr&#xff0c;无需额外参数调整&#xff0c;特别适用于中文语音的高质量转录&#xff0c;确保识别准确率…...

Vue.js计算属性

计算属性​ 基础示例​ 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象: js const author = reactive({name: John Doe,books: [Vue 2 - Advanced Guide,Vue 3 - Bas…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...