## 环境准备
确保你已经安装了 Python 和 Flask。同时,安装 SQLAlchemy 作为 ORM 工具,以及 Flask-Migrate 用于数据库迁移。
```bash
pip install Flask
pip install Flask-SQLAlchemy
pip install Flask-Migrate
```
## Flask 应用结构
我们的 Flask 应用将包含以下几个主要部分:
- `app.py`:这是我们的主要 Flask 应用文件。
- `models.py`:包含我们的数据库模型。
- `views.py`:包含我们的路由和视图函数。
- `forms.py`:包含 WTForms 表单。
- `templates`:一个文件夹,包含 HTML 模板文件。
## 1. 初始化 Flask 应用
在 `app.py` 文件中,我们将初始化 Flask 应用并设置数据库。
```python
from flask import Flask, render_template, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///library.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)
migrate = Migrate(app, db)from models import Book
from views import *if __name__ == '__main__':app.run(debug=True)
```
## 2. 定义数据库模型
在 `models.py` 文件中,我们将定义图书的模型。
```python
from app import dbclass Book(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(100), nullable=False)author = db.Column(db.String(100), nullable=False)description = db.Column(db.Text, nullable=True)created_at = db.Column(db.DateTime(), default=db.func.current_timestamp())def __repr__(self):return f'<Book {self.title}>'
```
## 3. 创建表单
在 `forms.py` 文件中,我们将创建用于添加和编辑图书的表单。
```python
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequiredclass BookForm(FlaskForm):title = StringField('Title', validators=[DataRequired()])author = StringField('Author', validators=[DataRequired()])description = TextAreaField('Description')submit = SubmitField('Save')
```
## 4. 定义视图
在 `views.py` 文件中,我们将定义路由和视图函数。
```python
from flask import render_template, url_for, flash, redirect, request
from app import app, db
from models import Book
from forms import BookForm@app.route('/')
def index():books = Book.query.all()return render_template('index.html', books=books)@app.route('/book/add', methods=['GET', 'POST'])
def add_book():form = BookForm()if form.validate_on_submit():book = Book(title=form.title.data, author=form.author.data, description=form.description.data)db.session.add(book)db.session.commit()flash('Book has been added!')return redirect(url_for('index'))return render_template('add_book.html', form=form)# Additional views for book editing and deletion will be added hereif __name__ == "__main__":app.run(debug=True)
```
## 5. 创建 HTML 模板
在 `templates` 文件夹中,我们将创建 HTML 文件来定义用户界面。例如,`index.html` 用于展示图书列表,`add_book.html` 用于添加新图书的表单。
```html
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Library Management System</title>
</head>
<body><h1>Book List</h1><a href="{{ url_for('add_book') }}">Add a new book</a><ul>{% for book in books %}<li><strong>{{ book.title }}</strong> by {{ book.author }} - {{ book.created_at }}<a href="{{ url_for('edit_book', id=book.id) }}">Edit</a><form action="{{ url_for('delete_book', id=book.id) }}" method="post"><input type="submit" value="Delete"></form></li>{% endfor %}</ul>
</body>
</html>
6. 运行应用
确保所有文件都已正确创建后,运行 app.py
来启动 Flask 应用。
python app.py
访问 http://127.0.0.1:5000/
来查看你的图书管理系统。
结语
本篇博客提供了一个基本的 Flask 图书管理系统实现。这个系统包括图书的添加、展示、编辑和删除等基本功能。在实际应用中,你可能需要添加用户认证、更复杂的搜索功能、分页显示等。希望这个案例能够帮助你理解 Flask 和 SQLAlchemy 的基本用法,并激发你进一步探索和学习的兴趣。