欢迎光临
我们一直在努力

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 部署流程

  • 导出依赖:pip freeze > requirements.txt
  • 服务器安装 Python 与虚拟环境
  • 上传代码,安装依赖
  • 使用 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 部署等进阶内容,逐步成长为全栈开发者。

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

     

    赞(0)
    未经允许不得转载:171主机测评 » Python Web 开发:Flask 快速入门教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址