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

Flask + SQLite 简单案例

# Flask + SQLite 简单案例

下面是一个使用Flask和SQLite的完整案例,实现一个简单的用户管理后台系统。

## 项目结构
```
flask_sqlite_demo/
├── app.py              # 主应用文件
├── models.py           # 数据库模型
├── templates/          # 模板文件夹
│   ├── base.html       # 基础模板
│   ├── index.html      # 首页
│   ├── add_user.html   # 添加用户页面
│   └── edit_user.html  # 编辑用户页面
└── instance/           # 实例文件夹(SQLite数据库将创建在这里)
    └── app.db          # SQLite数据库文件
```

## 代码实现

### 1. app.py
```python
from flask import Flask, render_template, request, redirect, url_for, flash
from models import db, User

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 初始化数据库
db.init_app(app)

# 创建数据库表
@app.before_first_request
def create_tables():
    db.create_all()

@app.route('/')
def index():
    users = User.query.all()
    return render_template('index.html', users=users)

@app.route('/add', methods=['GET', 'POST'])
def add_user():
    if request.method == 'POST':
        username = request.form['username']
        email = request.form['email']
        
        # 检查用户名是否已存在
        if User.query.filter_by(username=username).first():
            flash('用户名已存在!', 'error')
            return redirect(url_for('add_user'))
        
        # 创建新用户
        new_user = User(username=username, email=email)
        db.session.add(new_user)
        db.session.commit()
        
        flash('用户添加成功!', 'success')
        return redirect(url_for('index'))
    
    return render_template('add_user.html')

@app.route('/edit/<int:user_id>', methods=['GET', 'POST'])
def edit_user(user_id):
    user = User.query.get_or_404(user_id)
    
    if request.method == 'POST':
        user.username = request.form['username']
        user.email = request.form['email']
        db.session.commit()
        
        flash('用户信息更新成功!', 'success')
        return redirect(url_for('index'))
    
    return render_template('edit_user.html', user=user)

@app.route('/delete/<int:user_id>')
def delete_user(user_id):
    user = User.query.get_or_404(user_id)
    db.session.delete(user)
    db.session.commit()
    
    flash('用户删除成功!', 'success')
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)
```

### 2. models.py
```python
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    
    def __repr__(self):
        return f'<User {self.username}>'
```

### 3. templates/base.html
```html
<!DOCTYPE html>
<html>
<head>
    <title>Flask SQLite Demo</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>
    <div class="container mt-4">
        {% with messages = get_flashed_messages(with_categories=true) %}
            {% if messages %}
                {% for category, message in messages %}
                    <div class="alert alert-{{ category }}">{{ message }}</div>
                {% endfor %}
            {% endif %}
        {% endwith %}
        
        {% block content %}{% endblock %}
    </div>
</body>
</html>

5558

http://www.xdnf.cn/news/3974.html

相关文章:

  • 位置权限关掉还能看到IP属地吗?全面解析定位与IP的关系
  • 腾讯云服务器技术全景解析:从基础架构到行业赋能​
  • React-router v7 第七章(导航)
  • 如何使用VSCode编写C、C++和Python程序
  • ES类迁移方法
  • 【翻译、转载】MCP 提示 (Prompts)
  • Kubernetes 安装 minikube
  • 计算机图形学编程(使用OpenGL和C++)(第2版) 01.环境搭建
  • Python的ArcPy基于Excel表格对大量遥感影像批量重分类
  • 第8章 Python 其他数据类型概述
  • LeetCode 1007. 行相等的最少多米诺旋转 题解
  • ZArchiver正版:高效文件管理,完美解压体验
  • 二、大模型原理:图文解析Transformer原理与代码
  • 第十章.XML
  • Android第三次面试总结之activity和线程池篇(补充)
  • C++基础算法:Dijkstra
  • Python 函数装饰器和闭包(变量作用域规则)
  • 基于k8s系统的API网关-kong网关
  • C++类与对象—下:夯实面向对象编程的阶梯
  • c++STL——set和map的使用
  • 5个情感丰富GPT-4o图像提示词(不是吉卜力风格)
  • transfomer网络构建
  • 平衡二叉搜索树模拟实现1-------AVL树(插入,删除,查找)
  • Fine Structure-Aware Sampling(AAAI 2024)论文笔记和启发
  • 交叉编译 opencv-4.10
  • [MATLAB]通过50个MATLAB程序理解信号与系统的核心概念
  • 学习黑客 TCP/IP
  • 【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制
  • 57认知干货:AI机器人产业
  • 力扣解题汇总(困难)