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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 使用 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
AI 代码解读

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)
AI 代码解读

增加用户

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
AI 代码解读

分页查询用户

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)
AI 代码解读

更新用户信息

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
AI 代码解读

完整源码下载

注意点

  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 开发时有所帮助。

目录
打赏
0
2
2
0
24
分享
相关文章
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
136 1
实战指南:使用Python Flask与WebSocket实现高效的前后端分离实时系统
【7月更文挑战第18天】构建实时Web应用,如聊天室,可借助Python的Flask和WebSocket。安装Flask及Flask-SocketIO库,创建Flask应用,处理WebSocket事件。前端模板通过Socket.IO库连接服务器,发送和接收消息。运行应用,实现实时通信。此示例展现了Flask结合WebSocket实现前后端实时交互的能力。
736 3
|
9月前
|
python3之flask快速入门教程Demo
python3之flask快速入门教程Demo
116 6
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
231 0
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,页面显示定制的电影列表样式。
127 2
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等方法,提供了一系列示例。
379 1
|
10月前
|
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
247 1
Flask框架在Python面试中的应用与实战
利用Python和Flask构建RESTful API的实战指南
在当今的软件开发中,RESTful API已成为前后端分离架构中的核心组件。本文将带你走进实战,通过Python的Flask框架,一步步构建出高效、安全的RESTful API。我们将从项目初始化、路由设置、数据验证、错误处理到API文档生成,全方位地探讨如何构建RESTful API,并给出一些实用的最佳实践和优化建议。
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
Python Flask Echarts数据可视化图表实战晋级笔记(4)ajax参数传递互动
140 0