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
