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

Flask 入门:轻量级 Python Web 框架的快速上手 - 指南

Flask 入门:轻量级 Python Web 框架的快速上手

今天我们来深入探讨 Flask,一个轻量、灵活且易于上手的 Python Web 开发框架。Flask 以其简洁的设计、模块化的扩展能力和快速开发特性,成为构建小型到中型 Web 应用的理想选择。本文将带你从零搭建一个简单的 Flask 项目,实现用户管理的 REST API,适合初学者快速上手,同时为有经验的开发者提供进阶建议和优化思路。

Flask 是一个微框架,核心功能精简,但通过扩展(如 Flask-RESTful)可实现复杂功能。本文基于 Flask 2.x,使用 Python 3.10+ 和 SQLite 数据库,通过 Flask-RESTful 实现 API。让我们开始吧!

前置准备

在开始之前,确保开发环境已就绪:

安装 Python 和 Flask

步骤 1: 创建 Flask 项目

初始化项目并创建一个简单的 Flask 应用。

flask-demo/app.py 中编写核心代码:

from flask import Flask
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///instance/app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
api = Api(app)
if __name__ == '__main__':
app.run(debug=True)

说明

  • Flask:创建应用实例。
  • SQLAlchemy:用于数据库操作。
  • Api:Flask-RESTful 提供 REST API 支持。
  • debug=True:开发模式,自动重载。

步骤 2: 定义模型

flask-demo/models.py 中定义 User 模型:

from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
age = db.Column(db.Integer, nullable=False)
def __str__(self):
return f'<User {self.name}>'

初始化数据库
在项目根目录运行 Python 解释器:

from app import app, db
with app.app_context():
db.create_all()

说明

  • db.Model:定义数据库模型。
  • db.create_all():创建 SQLite 数据库和表(instance/app.db)。

步骤 3: 创建 REST API

app.py 中添加 API 资源:

from flask import Flask
from flask_restful import Api, Resource, reqparse, abort
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///instance/app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
api = Api(app)
# 导入模型
from models import User
# 请求解析器
user_parser = reqparse.RequestParser()
user_parser.add_argument('name', type=str, required=True, help='Name is required')
user_parser.add_argument('age', type=int, required=True, help='Age is required')
# 用户资源
class UserResource(Resource):
def get(self, user_id):
user = User.query.get(user_id)
if not user:
abort(404, message=f"User {user_id} not found")
return {'id': user.id, 'name': user.name, 'age': user.age}
def put(self, user_id):
args = user_parser.parse_args()
user = User.query.get(user_id)
if not user:
abort(404, message=f"User {user_id} not found")
user.name = args['name']
user.age = args['age']
db.session.commit()
return {'id': user.id, 'name': user.name, 'age': user.age}, 200
def delete(self, user_id):
user = User.query.get(user_id)
if not user:
abort(404, message=f"User {user_id} not found")
db.session.delete(user)
db.session.commit()
return '', 204
class UserListResource(Resource):
def get(self):
users = User.query.all()
return [{'id': user.id, 'name': user.name, 'age': user.age} for user in users]
def post(self):
args = user_parser.parse_args()
user = User(name=args['name'], age=args['age'])
db.session.add(user)
db.session.commit()
return {'id': user.id, 'name': user.name, 'age': user.age}, 201
# 添加路由
api.add_resource(UserListResource, '/api/users')
api.add_resource(UserResource, '/api/users/<int:user_id>')if __name__ == '__main__':app.run(debug=True)

说明

  • RequestParser:验证和解析请求参数。
  • UserResource:处理单用户操作(GET/PUT/DELETE)。
  • UserListResource:处理用户列表(GET/POST)。

步骤 4: 运行和测试

  1. 启动服务器

    python app.py
  2. 测试 API

    • GEThttp://localhost:5000/api/users:列出所有用户。
    • POSThttp://localhost:5000/api/users
      {
      "name": "Alice",
      "age": 25
      }
    • GEThttp://localhost:5000/api/users/1:获取 ID 为 1 的用户。
    • PUThttp://localhost:5000/api/users/1
      {
      "name": "Bob",
      "age": 30
      }
    • DELETEhttp://localhost:5000/api/users/1:删除用户。
  3. 调试技巧

    • 错误日志:查看终端输出(debug=True)。
    • 数据库问题:检查 instance/app.db 或 SQLAlchemy 配置。
    • API 测试:使用 Postman、curl 或 VS Code 的 REST Client。

步骤 5: 依赖管理

创建 requirements.txt

pip freeze > requirements.txt

内容示例:

Flask==2.3.3
Flask-RESTful==0.3.10
Flask-SQLAlchemy==3.1.1

安装依赖

pip install -r requirements.txt

进阶与最佳实践

  • 生产配置

    • 使用 WSGI 服务器(如 Gunicorn):
      pip install gunicorn
      gunicorn -w 4 -b 0.0.0.0:5000 app:app
    • 配置环境变量:
      app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'sqlite:///instance/app.db')
  • 数据库迁移:使用 Flask-Migrate:

    pip install flask-migrate

    初始化:

    from flask_migrate import Migrate
    migrate = Migrate(app, db)

    命令:

    flask db init
    flask db migrate
    flask db upgrade
  • 认证和权限

    • 集成 Flask-JWT-Extended 或 Flask-Login:
      pip install flask-jwt-extended
  • 性能优化

    • 缓存:集成 Flask-Caching(支持 Redis/Memcached)。
    • 分页:为列表 API 添加分页逻辑。
    • 日志:配置 Python 的 logging 模块。
  • 容器化
    创建 Dockerfile

    FROM python:3.10-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]
  • 资源推荐:Flask 官网(flask.palletsprojects.com)、《Flask Web Development》。多实践 REST API 和认证系统。

总结

通过这个 Flask 示例,你学会了创建项目、定义模型、构建 REST API 和使用 SQLite 数据库。Flask 的轻量设计和灵活扩展使其适合快速开发和小型项目。

http://www.gsyq.cn/news/35188.html

相关文章:

  • OceanBase系列---【oceanbase的oracle模式新增分区表】
  • Bettercap(中间人攻击神器)
  • 模块-文本
  • 偏微分方程数值解
  • 进销存软件和ERP是包含关系吗?
  • jenkins 权限控制(用户只能看指定的项目)
  • [Programming Tips]Teach Yourself Programming in Ten Years by Peter Norvig
  • 世界上最牛逼的人—黄景行
  • 非计算机专业,保姆级申请软著教程
  • 2025年功效型洗发水品牌推荐榜:二硫化硒去屑洗发水/香氛洗发水/控油蓬松洗发水/MASIL玛丝兰以科技适配多元洗护需求​
  • Python字典 _ 创个秒查流行语的词典
  • B3612 【深进1.例1】求区间和
  • 2025氮化硼陶瓷/高温绝缘体/坩埚/套管/基板/高温构件/耐腐蚀构件厂家综合推荐榜:福维科新材料以全产业链布局与高性能材料引领行业创新
  • Mac版Color Folder v3.8安装教程(附dmg文件安装步骤和搜索关键词)
  • hook 工具随笔
  • 堆和栈的生命周期对于代码的影响
  • pgsql索引冗余分析
  • 详细介绍:Leetcode 3700. Number of ZigZag Arrays II
  • 老旧环境torch版本(0.4.1)环境配置总结
  • 代码大全阅读笔记3
  • 通过中国信通院SQL质量管理最高等级评测,天翼云TeleDB引领数据库管理新标准!
  • 代码大阅读笔记
  • 第二次软件基础作业
  • 实用指南:从0死磕全栈之Next.js Server Actions 入门实战:在服务端安全执行逻辑,告别 API 路由!
  • 重塑生产力:天翼云全球首发RaaS,开启“机器人即服务”商业时代!
  • Sequence2Sequence - -一叶知秋
  • 第177天:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound
  • 如何在Linux中,为Flatpak版本的Edge浏览器导入证书
  • Java 集合 “Map(1)”面试清单(含超通俗生活案例与深度理解) - 教程
  • 2025 年铸铁井盖生产厂家最新推荐榜,技术实力与市场口碑深度解析防沉降球墨/防沉降/电力/双层铸铁井盖公司推荐