Flask 实战:实现增改及分页查询的完整 Demo

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 使用 Flask 搭建的 RESTful API Demo,包含增、改用户信息和分页查询功能。利用 Flask-SQLAlchemy 处理数据库操作。环境准备:安装 Flask 和 Flask-SQLAlchemy。核心代码展示用户模型、增加用户、分页查询和更新用户信息的路由。注意点包括数据库配置、错误处理、JSON 数据处理、幂等性、安全性和编码问题。提供完整源码下载链接。

Flask 实现增改及分页查询的完整 Demo

简介

本文将通过一个 Flask Demo 来展示如何使用 Flask 框架实现 RESTful API,包括增加、修改用户信息以及分页查询功能。我们将使用 Flask 的扩展 SQLAlchemy 来处理数据库操作。

环境准备

首先,确保你已安装 Flask 和 Flask-SQLAlchemy。如果尚未安装,可以通过以下命令安装:

pip install Flask Flask-SQLAlchemy

Flask 应用结构

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

# 引入 Flask 和 SQLAlchemy 相关模块
from flask import Flask, request, jsonify, abort
from flask_sqlalchemy import SQLAlchemy
import os

# 创建 Flask 应用实例
app = Flask(__name__)

# 配置数据库 URI 和 JSON 编码
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///data.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config['JSON_AS_ASCII'] = False  # flask 2.2.5以下 允许返回非ASCII字符
app.json.ensure_ascii = False # flask 2.3.0以上 允许返回非ASCII字符

# 创建 SQLAlchemy 实例绑定到应用
db = SQLAlchemy(app)

# 定义 User 模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))

# 创建数据库表
db.create_all()

# 增加用户
@app.route("/user/add", methods=['POST'])
def add_user():
    # 省略具体实现...

# 分页查询用户
@app.route("/users", methods=['GET'])
def get_users():
    # 省略具体实现...

# 更新用户信息
@app.route("/user/<int:user_id>", methods=['POST'])
def update_user(user_id):
    # 省略具体实现...

# 运行 Flask 应用
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=3200, debug=True)

增加用户

add_user 函数中,我们处理 POST 请求来增加新用户:

@app.route("/user/add", methods=['POST'])
def add_user():
    user_data = request.json
    name = user_data.get('name')
    if not name:
        return jsonify({
   "error": "缺少 'name' 参数"}), 400
    new_user = User(name=name)
    db.session.add(new_user)
    try:
        db.session.commit()
        return jsonify({
   "message": "新增成功"}), 201
    except Exception as e:
        db.session.rollback()
        return jsonify({
   "error": str(e)}), 500

分页查询用户

get_users 函数实现了用户信息的分页查询:

@app.route("/users", methods=['GET'])
def get_users():
    page = int(request.args.get('page', 1))
    per_page = int(request.args.get('per_page', 10))
    users = User.query.paginate(page=page, per_page=per_page, error_out=False)
    result = {
   
        'page': page,
        'per_page': per_page,
        'total': users.total,
        'list': [{
   'id': user.id, 'username': user.name} for user in users.items]
    }
    return jsonify(result)

更新用户信息

update_user 函数处理 POST 请求来更新用户信息:

@app.route("/user/<int:user_id>", methods=['POST'])
def update_user(user_id):
    user_data = request.get_json()
    name = user_data.get('name')
    if not name:
        return jsonify({
   "error": "Missing 'name' parameter"}), 400
    user = User.query.get(user_id)
    if not user:
        return jsonify({
   "error": "User not found"}), 404
    user.name = name
    try:
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        return jsonify({
   "error": str(e)}), 500
    return jsonify({
   "message": "User updated successfully"}), 200

完整源码下载

注意点

  1. 数据库配置:确保 SQLALCHEMY_DATABASE_URI 配置正确,它定义了数据库的位置和类型。
  2. 错误处理:在每个函数中,我们添加了错误处理逻辑,确保在发生错误时返回合适的 HTTP 状态码和错误信息。
  3. JSON 处理:通过 request.jsonjsonify 处理 JSON 数据,注意检查请求数据的有效性。
  4. 幂等性:虽然我们使用了 POST 请求来更新用户信息,但这违反了 RESTful API 的幂等性原则。在实际应用中,应考虑使用 PUT 或 PATCH 方法。
  5. 安全性:在生产环境中,确保采取适当的安全措施,如验证用户身份、防止 SQL 注入等。
  6. 编码问题:通过设置 JSON_AS_ASCIIapp.json.ensure_asciiFalse 解决中文编码问题。

通过这个 Demo,我们展示了 Flask 应用的基本结构和如何实现 RESTful API 的增改及分页查询功能。希望这个 Demo 对你在使用 Flask 进行 Web 开发时有所帮助。

目录
相关文章
|
1月前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
40 1
|
11天前
|
Python
python3之flask快速入门教程Demo
python3之flask快速入门教程Demo
32 6
|
1月前
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
|
10天前
|
前端开发 JavaScript Python
flask实战-模板实现公共导航
在Flask中实现模板继承,创建基础模板`base.html`,包含公共导航菜单。子模板`movie-extends.html`继承`base.html`,并定义主要内容。视图函数`movie_extends_view`渲染`movie-extends.html`,显示电影列表。通过`extra_css`和`extra_js`块添加页面特定的样式和脚本,实现在`movie-extends.html`中应用自定义CSS样式。运行应用,访问http://127.0.0.1:1027/movie-extends,页面显示定制的电影列表样式。
34 2
|
19天前
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
302 1
|
1月前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
40 1
Flask框架在Python面试中的应用与实战
|
1月前
|
存储 缓存 监控
利用Python和Flask构建RESTful API的实战指南
在当今的软件开发中,RESTful API已成为前后端分离架构中的核心组件。本文将带你走进实战,通过Python的Flask框架,一步步构建出高效、安全的RESTful API。我们将从项目初始化、路由设置、数据验证、错误处理到API文档生成,全方位地探讨如何构建RESTful API,并给出一些实用的最佳实践和优化建议。
|
1月前
|
存储 安全 算法
Flask用户认证与权限管理实战
【4月更文挑战第16天】在Flask Web开发中,用户认证和权限管理是保障安全的关键。本文介绍了实现这一目标的最佳实践:1) 设计用户模型,使用SQLAlchemy存储用户信息;2) 通过密码哈希确保密码安全,使用`werkzeug.security`进行哈希和验证;3) 实现登录功能,借助Flask-Login处理登录和登出;4) 进行权限管理,定义角色和权限模型,用装饰器或函数检查用户权限。通过这些方法,开发者能有效地控制用户访问,提升应用安全性。
|
1月前
|
安全 数据库连接 数据库
Flask数据库操作实战:增删改查一网打尽
【4月更文挑战第15天】本文介绍了在Flask中进行数据库操作的方法,包括选择数据库扩展(如Flask-SQLAlchemy)、配置数据库、定义模型以及执行CRUD操作。通过Flask-SQLAlchemy的ORM功能,开发者可以方便地管理数据库表和记录。文章详细展示了如何创建模型、添加、查询、更新和删除数据,并提到了高级查询和关系映射。此外,还提及了数据库迁移工具Flask-Migrate以及性能优化和安全性问题。了解这些基础,有助于开发者构建高效、安全的Flask Web应用。
|
1月前
|
搜索推荐 数据库连接 数据库
手把手教你使用Flask搭建ES搜索引擎(实战篇)
手把手教你使用Flask搭建ES搜索引擎(实战篇)
89 0
手把手教你使用Flask搭建ES搜索引擎(实战篇)