news 2026/5/4 20:50:48

Python Web 开发:Flask 快速入门教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python Web 开发:Flask 快速入门教程

本文详细介绍 Python Web 开发中Flask 框架的全套入门知识,涵盖环境安装、路由视图、请求响应、模板渲染、表单处理、数据库集成、会话认证、蓝图、错误处理、静态文件、项目部署等核心内容。全文通俗易懂、案例可直接运行,适合零基础小白快速掌握 Flask 开发,是进入 Python 后端开发的必备教程。

前言

Python 作为简洁高效、生态丰富的编程语言,在 Web 开发领域占据重要地位。Flask是 Python 生态中最流行的轻量级 Web 框架,以 “微内核、易扩展、上手快” 著称,非常适合快速开发 API 接口、个人博客、小型网站、管理后台、自动化服务等项目。相比 Django 的 “大而全”,Flask 追求 “小而美”,只保留核心 Web 功能,其余组件可按需安装,自由度极高,是初学者入门 Web 开发的最佳选择。

本专栏带你从零基础起步,一步步掌握 Flask 核心用法,从 Hello World 到完整项目实战,让你快速具备独立开发 Flask 应用的能力,为后续学习进阶框架、分布式服务、前后端分离打下坚实基础。

随着互联网发展,Web 开发需求日益增长。Flask 凭借轻量、灵活、易上手的特点,成为中小项目与快速原型开发的首选框架。无论你是学生、职场人士,还是转行编程的初学者,都能通过 Flask 快速实现自己的 Web 想法。本文从安装到实战,由浅入深,带你全面掌握 Flask 开发技能。


一、什么是 Flask?

Flask 是由 Armin Ronacher 开发的轻量级 Python Web 微框架,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎,遵循 “微内核” 设计理念:

  • 核心仅包含路由、请求响应、模板引擎、会话管理等基础功能
  • 扩展机制完善,可通过第三方库添加数据库、表单、认证、缓存等功能
  • 代码简洁、文档清晰、学习成本低
  • 支持 WSGI 标准,兼容主流服务器与部署方式
  • 适合小型网站、API 服务、管理后台、个人项目、原型开发

适用场景

  • 个人博客、笔记系统
  • RESTful API 接口服务
  • 小型管理后台
  • 数据可视化看板
  • 自动化办公 Web 工具
  • 测试环境、临时服务

二、Flask 环境搭建与准备

2.1 开发环境要求

  • Python 3.6 及以上版本
  • 命令行工具(CMD、PowerShell、Terminal)
  • 代码编辑器(VS Code、PyCharm 均可)

2.2 虚拟环境创建(推荐)

为避免依赖冲突,建议为每个项目创建独立虚拟环境:

bash

运行

# 创建项目文件夹 mkdir flask_demo cd flask_demo # 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows venv\Scripts\activate # Mac/Linux source venv/bin/activate

激活后命令行前缀会出现(venv)标识。

2.3 安装 Flask

在激活的虚拟环境中执行:

bash

运行

pip install flask

验证安装:

bash

运行

flask --version

出现版本号即安装成功,示例:Python 3.9.0/Flask 2.3.3

2.4 第一个 Flask 程序(Hello Flask)

创建app.py文件,写入以下代码:

python

运行

# 导入Flask核心类 from flask import Flask # 创建应用实例,__name__是当前模块名 app = Flask(__name__) # 定义路由:访问根路径/时执行下面函数 @app.route('/') def index(): return "<h1>Hello Flask!欢迎来到Python Web开发世界</h1>" # 程序入口:直接运行时启动服务 if __name__ == '__main__': # debug=True:开启调试模式,代码修改自动重启 app.run(debug=True)

2.5 运行与访问

命令行执行:

bash

运行

python app.py

控制台输出:

plaintext

* Serving Flask app 'app' * Debug mode: on * Running on http://127.0.0.1:5000/

打开浏览器访问:http://127.0.0.1:5000,即可看到页面。


三、Flask 核心:路由与视图函数

路由是 Flask 的核心,用于将 URL 地址绑定到视图函数,用户访问 URL 时执行对应函数并返回结果。

3.1 基础路由

python

运行

@app.route('/') def index(): return "首页" @app.route('/about') def about(): return "关于页面"

3.2 带参数的路由

支持在 URL 中传递参数,支持指定参数类型:

python

运行

# 字符串参数(默认) @app.route('/user/<username>') def user_profile(username): return f"用户:{username}" # 整数参数 @app.route('/age/<int:age>') def user_age(age): return f"年龄:{age}" # 浮点数参数 @app.route('/price/<float:price>') def product_price(price): return f"价格:{price}" # 路径参数(可包含/) @app.route('/path/<path:subpath>') def show_path(subpath): return f"路径:{subpath}"

3.3 指定请求方法

Flask 默认支持 GET 请求,可通过methods指定支持的请求类型:

python

运行

from flask import request # 同时支持GET和POST @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return "处理登录请求" return "显示登录页面"

常用请求方法:GET、POST、PUT、DELETE。

3.4 路由别名与 url_for

使用endpoint指定路由别名,通过url_for反向解析 URL:

python

运行

from flask import url_for @app.route('/index', endpoint='idx') def index(): return "首页" # 测试url_for @app.route('/test') def test(): return url_for('idx') # 输出:/index

3.5 路由优先级

相同 URL 路由,先定义的优先匹配,后定义的不会执行。


四、请求与响应处理

Flask 通过request对象获取请求数据,通过返回值、make_response构造响应。

4.1 request 常用属性

python

运行

from flask import request @app.route('/req') def req_info(): # 请求方法 method = request.method # URL地址 url = request.url # GET参数 args = request.args # POST表单数据 form = request.form # JSON数据 json_data = request.json # 请求头 headers = request.headers # 客户端IP ip = request.remote_addr return f""" 请求方法:{method}<br> 请求地址:{url}<br> 客户端IP:{ip} """

4.2 获取 GET 请求参数

python

运行

# 访问:/search?keyword=python&page=1 @app.route('/search') def search(): keyword = request.args.get('keyword', '') page = request.args.get('page', 1, type=int) return f"搜索:{keyword},第{page}页"

4.3 获取 POST 请求参数

python

运行

@app.route('/post', methods=['POST']) def post_test(): username = request.form.get('username') password = request.form.get('password') return f"用户名:{username},密码:{password}"

4.4 构造响应对象

python

运行

from flask import make_response @app.route('/resp') def resp(): # 构造响应 response = make_response("自定义响应内容", 200) # 设置响应头 response.headers['Author'] = 'Flask' # 设置Cookie response.set_cookie('username', 'flask_user') return response

4.5 返回 JSON 数据

python

运行

from flask import jsonify @app.route('/api/user') def api_user(): data = { "name": "张三", "age": 20, "gender": "男" } return jsonify(data)

五、Jinja2 模板引擎

Flask 默认使用 Jinja2 模板引擎,实现 HTML 与 Python 代码分离,支持变量、循环、条件判断、过滤器、继承等。

5.1 模板目录结构

项目根目录创建templates文件夹,所有 HTML 文件放入其中:

plaintext

flask_demo/ app.py templates/ index.html base.html

5.2 渲染模板

python

运行

from flask import render_template @app.route('/template') def template_demo(): # 传递变量到模板 data = { "title": "Flask模板", "content": "Hello Jinja2", "user_list": ["张三", "李四", "王五"] } return render_template('index.html', **data)

5.3 模板基础语法

html

预览

<!-- index.html --> <!DOCTYPE html> <html> <head> <title>{{ title }}</title> </head> <body> <h1>{{ content }}</h1> <!-- 条件判断 --> {% if user_list %} <ul> <!-- 循环 --> {% for user in user_list %} <li>{{ user }}</li> {% endfor %} </ul> {% else %} <p>暂无用户</p> {% endif %} <!-- 过滤器 --> <p>{{ content | upper }}</p> </body> </html>

5.4 模板继承(复用布局)

创建基础模板base.html

html

预览

<!DOCTYPE html> <html> <head> <title>{% block title %}默认标题{% endblock %}</title> </head> <body> <div class="content"> {% block content %}{% endblock %} </div> </body> </html>

子页面继承:

html

预览

{% extends 'base.html' %} {% block title %}子页面{% endblock %} {% block content %} <h1>继承自base.html</h1> {% endblock %}

5.5 常用过滤器

  • {{ name | upper }}:转大写
  • {{ name | lower }}:转小写
  • {{ text | truncate(10) }}:截断文本
  • {{ price | round(2) }}:保留两位小数
  • {{ list | length }}:获取长度

六、静态文件处理

静态文件包括 CSS、JS、图片、字体等,Flask 默认从static目录加载。

6.1 静态目录结构

plaintext

flask_demo/ static/ css/ style.css js/ app.js images/ logo.png

6.2 模板中加载静态文件

html

预览

{% load static %} <!-- Flask自动支持,无需手动加载 --> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <script src="{{ url_for('static', filename='js/app.js') }}"></script> <img src="{{ url_for('static', filename='images/logo.png') }}">

七、Cookie 与 Session

用于保持用户状态,Cookie 存储在客户端,Session 存储在服务器端。

7.1 Cookie 操作

python

运行

# 设置Cookie @app.route('/set_cookie') def set_cookie(): resp = make_response("设置Cookie成功") resp.set_cookie('username', 'flask', max_age=3600) return resp # 获取Cookie @app.route('/get_cookie') def get_cookie(): username = request.cookies.get('username', '未设置') return f"Cookie用户名:{username}"

7.2 Session 操作

使用 Session 必须设置密钥

python

运行

# 设置密钥 app.secret_key = 'your_secret_key_here' # 设置Session @app.route('/set_session') def set_session(): session['user'] = 'flask_user' return "设置Session成功" # 获取Session @app.route('/get_session') def get_session(): user = session.get('user', '未登录') return f"Session用户:{user}" # 删除Session @app.route('/del_session') def del_session(): session.pop('user', None) return "删除Session成功"

八、Flask-WTF 表单处理

处理 Web 表单,支持验证、防 CSRF 攻击。

8.1 安装扩展

bash

运行

pip install flask-wtf

8.2 定义表单类

python

运行

from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Length # 定义登录表单 class LoginForm(FlaskForm): username = StringField('用户名', validators=[ DataRequired(), Length(min=3, max=20) ]) password = PasswordField('密码', validators=[DataRequired()]) submit = SubmitField('登录')

8.3 视图与模板使用

python

运行

@app.route('/form', methods=['GET', 'POST']) def form_demo(): form = LoginForm() if form.validate_on_submit(): return f"登录成功:{form.username.data}" return render_template('form.html', form=form)

form.html:

html

预览

<form method="POST"> {{ form.hidden_tag() }} <!-- 防CSRF --> {{ form.username.label }} {{ form.username }}<br> {{ form.password.label }} {{ form.password }}<br> {{ form.submit }} </form>

九、Flask-SQLAlchemy 数据库操作

Flask 常用 ORM 库,支持 SQLite、MySQL、PostgreSQL。

9.1 安装

bash

运行

pip install flask-sqlalchemy

9.2 配置数据库

python

运行

from flask_sqlalchemy import SQLAlchemy # 配置SQLite数据库 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 创建数据库实例 db = SQLAlchemy(app)

9.3 定义模型

python

运行

class User(db.Model): # 表名 __tablename__ = 'user' # 字段 id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) age = db.Column(db.Integer) def __repr__(self): return f'<User {self.username}>'

9.4 创建表

python

运行

# 在Python交互环境或代码中执行 with app.app_context(): db.create_all()

9.5 增删改查

python

运行

# 增 @app.route('/add') def add_user(): user = User(username='flask', age=20) db.session.add(user) db.session.commit() return "添加成功" # 查 @app.route('/query') def query_user(): user = User.query.filter_by(username='flask').first() return f"ID:{user.id},用户名:{user.username}" # 改 @app.route('/update') def update_user(): user = User.query.get(1) user.age = 21 db.session.commit() return "修改成功" # 删 @app.route('/delete') def delete_user(): user = User.query.get(1) db.session.delete(user) db.session.commit() return "删除成功"

十、蓝图(Blueprint)模块化管理

项目变大后,用蓝图拆分路由,实现模块化。

10.1 创建蓝图

python

运行

# 创建user.py蓝图文件 from flask import Blueprint # 初始化蓝图 user_bp = Blueprint('user', __name__, url_prefix='/user') # 蓝图路由 @user_bp.route('/login') def login(): return "用户登录" @user_bp.route('/info') def info(): return "用户信息"

10.2 注册蓝图

python

运行

# app.py中 from user import user_bp app.register_blueprint(user_bp)

访问:/user/login/user/info


十一、错误页面处理

自定义 404、500 等错误页面。

python

运行

# 404错误 @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 # 500错误 @app.errorhandler(500) def server_error(e): return "服务器内部错误", 500

十二、Flask 项目配置管理

12.1 基础配置

python

运行

# 调试模式 app.debug = True # 密钥 app.secret_key = 'xxx' # 数据库 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'

12.2 配置文件分离

创建config.py

python

运行

class Config: SECRET_KEY = 'your_secret_key' DEBUG = True class DevelopmentConfig(Config): SQLALCHEMY_DATABASE_URI = 'sqlite:///dev.db' class ProductionConfig(Config): DEBUG = False SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@localhost/db'

使用:

python

运行

app.config.from_object('config.DevelopmentConfig')

十三、Flask 项目部署上线

13.1 关闭调试模式

python

运行

app.run(debug=False)

13.2 使用 Gunicorn 部署

bash

运行

pip install gunicorn gunicorn -w 4 -b 0.0.0.0:5000 app:app

13.3 部署流程

  1. 导出依赖:pip freeze > requirements.txt
  2. 服务器安装 Python 与虚拟环境
  3. 上传代码,安装依赖
  4. 使用 Gunicorn+Nginx 代理部署

十四、常用 Flask 扩展

  • Flask-SQLAlchemy:数据库 ORM
  • Flask-WTF:表单验证
  • Flask-Login:用户登录认证
  • Flask-Mail:邮件发送
  • Flask-CORS:跨域处理
  • Flask-RESTful:RESTful API 开发
  • Flask-Caching:缓存功能
  • Flask-Migrate:数据库迁移

十五、Flask 完整项目结构示例

plaintext

flask_project/ app.py # 入口文件 config.py # 配置文件 extensions.py # 扩展初始化 requirements.txt # 依赖列表 static/ # 静态文件 templates/ # 模板 modules/ # 蓝图模块 user/ # 用户模块 __init__.py views.py blog/ # 博客模块 __init__.py views.py

十六、总结

本文全面讲解了 Flask 快速入门的全部核心知识点,从环境搭建到项目部署,覆盖:

  • Flask 基础概念与安装
  • 路由、视图、请求响应
  • 模板引擎与静态文件
  • Cookie、Session、表单验证
  • 数据库 ORM 操作
  • 蓝图模块化、错误处理、配置管理
  • 项目结构与部署上线

Flask 作为轻量级 Web 框架,上手快、灵活性高,是 Python Web 开发的入门首选。掌握本文内容,你已具备独立开发 Flask 项目的能力,可快速实现个人博客、API 接口、管理后台等应用。后续可深入学习 RESTful API、用户权限、缓存、异步、Docker 部署等进阶内容,逐步成长为全栈开发者。

建议多动手实践,从简单页面开始,逐步完成完整项目,在实战中巩固知识、提升能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:25:07

项目周会纪要(2025-10-01)

项目周会纪要&#xff08;2025-10-01&#xff09; 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat 决策&#xff1a;Q4预算优先分配至移动端开发行动项&#xff1a;…

作者头像 李华
网站建设 2026/4/17 22:45:43

2026最权威的六大AI科研方案实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 作为具有先进性的大语言模型的DeepSeek&#xff0c;在论文写作里能够发挥出有着多种不同情况…

作者头像 李华
网站建设 2026/4/17 21:33:37

边缘计算场景展示:在资源受限设备上运行轻量化M2LOrder模型

边缘计算场景展示&#xff1a;在资源受限设备上运行轻量化M2LOrder模型 最近几年&#xff0c;AI模型变得越来越强大&#xff0c;但随之而来的问题是&#xff0c;它们也越来越“重”了。动辄几十上百亿参数的大模型&#xff0c;需要强大的云端服务器才能跑得动。这带来了两个麻…

作者头像 李华
网站建设 2026/4/17 8:24:37

解锁Qwen3-TTS新玩法:在复古游戏界面中创作你的AI语音作品

解锁Qwen3-TTS新玩法&#xff1a;在复古游戏界面中创作你的AI语音作品 1. 当AI语音遇上复古游戏&#xff1a;一场声音的像素冒险 还记得小时候玩红白机时&#xff0c;那些简单却充满魔力的8-bit音效吗&#xff1f;现在&#xff0c;你可以用同样的怀旧方式创作属于自己的AI语音…

作者头像 李华
网站建设 2026/4/17 14:18:30

React Native Date Picker 进阶用法:时区处理与夏令时兼容性

React Native Date Picker 进阶用法&#xff1a;时区处理与夏令时兼容性 【免费下载链接】react-native-date-picker React Native Date Picker is datetime picker for Android and iOS. It includes date, time and datetime picker modes. The datepicker is customizable a…

作者头像 李华