Flask+SQLite实现用户管理接口

用户管理模块接口开发

用户管理是后端系统的核心模块之一,涉及用户注册、登录、信息查询、更新与删除等基础能力。本文以一个基于 Python Flask + SQLite 的轻量实现为例,演示用户模块的接口设计与开发要点,代码可直接运行。

一、环境准备

安装依赖:

复制代码
pip install flask flask-cors

创建项目结构:

复制代码
user_api/
├── app.py          # 主入口
├── db.py           # 数据库操作
└── requirements.txt

二、数据库设计

db.py 负责建表与连接管理。用户表包含 id、username、password、email、created_at 字段。

复制代码
import sqlite3

def get_conn():
    conn = sqlite3.connect('user.db')
    conn.row_factory = sqlite3.Row
    return conn

def init_db():
    conn = get_conn()
    conn.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            username TEXT UNIQUE NOT NULL,
            password TEXT NOT NULL,
            email TEXT,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    ''')
    conn.commit()
    conn.close()

三、接口实现

1. 用户注册

复制代码
from flask import Flask, request, jsonify
from werkzeug.security import generate_password_hash

app = Flask(__name__)

@app.route('/api/users/register', methods=['POST'])
def register():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')
    if not username or not password:
        return jsonify({'code': 400, 'msg': '用户名或密码不能为空'}), 400

    conn = get_conn()
    if conn.execute('SELECT id FROM users WHERE username=?', (username,)).fetchone():
        conn.close()
        return jsonify({'code': 400, 'msg': '用户名已存在'}), 400

    hashed = generate_password_hash(password)
    conn.execute('INSERT INTO users (username, password) VALUES (?,?)', (username, hashed))
    conn.commit()
    conn.close()
    return jsonify({'code': 200, 'msg': '注册成功'}), 200

2. 用户登录

复制代码
from werkzeug.security import check_password_hash

@app.route('/api/users/login', methods=['POST'])
def login():
    data = request.get_json()
    conn = get_conn()
    row = conn.execute('SELECT * FROM users WHERE username=?',
                       (data.get('username'),)).fetchone()
    conn.close()
    if row and check_password_hash(row['password'], data.get('password')):
        return jsonify({'code': 200, 'msg': '登录成功', 'user_id': row['id']})
    return jsonify({'code': 401, 'msg': '用户名或密码错误'}), 401

3. 查询与更新用户

复制代码
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    conn = get_conn()
    row = conn.execute('SELECT id, username, email, created_at FROM users WHERE id=?',
                       (user_id,)).fetchone()
    conn.close()
    if not row:
        return jsonify({'code': 404, 'msg': '用户不存在'}), 404
    return jsonify({'code': 200, 'data': dict(row)})

@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    data = request.get_json()
    conn = get_conn()
    conn.execute('UPDATE users SET email=? WHERE id=?', (data.get('email'), user_id))
    conn.commit()
    conn.close()
    return jsonify({'code': 200, 'msg': '更新成功'})

四、启动与测试

复制代码
if __name__ == '__main__':
    init_db()
    app.run(host='0.0.0.0', port=5000, debug=True)

用 curl 验证:

复制代码
curl -X POST [http://localhost:5000/api/users/register](http://localhost:5000/api/users/register) \
  -H "Content-Type: application/json" \
  -d '{"username":"alice","password":"123456"}'

五、小结

本示例实现了用户模块的增查改核心接口,并采用密码哈希存储保障安全。生产环境中可进一步接入 JWT 鉴权、参数校验框架、统一异常处理与日志监控,提升接口的健壮性与可维护性。

海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】

相关推荐
2601_966949654 小时前
如何封装 qd.klines.batch(),让批量 K 线查询函数在多个策略中复用?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
神仙别闹5 小时前
基于Python实现英词语自动对齐系统
开发语言·python
老歌老听老掉牙5 小时前
圆柱端面四平面交线及其在yoz面投影的几何解析与 Python 实现
开发语言·python·平面
我要见SA姐16 小时前
Chrome 扩展安全攻防实录:从权限滥用到供应链投毒
运维·人工智能·python·机器学习·自动化
2601_962885726 小时前
给 backtrader 接 A 股数据:用 AlphaFeed 喂PandasData
python
YYYing.6 小时前
【Agent系列 (十一) 】上下文工程
人工智能·python·ai·agent·上下文工程
计算机毕业编程指导师6 小时前
基于深度学习的光伏组件红外图像缺陷识别系统设计与实现
人工智能·python·深度学习·目标检测·毕业设计·课程设计·光伏
前端精髓7 小时前
langchain 短期记忆(状态)动态运行时上下文
python·langchain
最强小杰8 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
DeepVisionary8 小时前
为拿并网许可,OpenAI在佐治亚新园区同意高峰期断电三成
python·自动化