Python 简易图书管理系统

## 环境准备

确保你已经安装了 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 Migrate

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///library.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = 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 db

class 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 DataRequired

class 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 here

if __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 的基本用法,并激发你进一步探索和学习的兴趣。

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值