flask项目之图书案例

本文通过一个简单的图书管理案例,演示如何创建和应用Flask项目。项目涉及数据库操作,包括添加作者和图书,以及实时显示和删除图书的功能。通过这个小项目,读者可以了解Flask的基础用法和项目结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天通过一个图书小案例来演示一下flask项目的创建与应用,这个只是最简单的项目创建,但是只要掌握了这个思想,大型的项目也不在话下的。当然还是需要掌握其他很多的知识的!
废话不多说,我们直接上代码(这是基于Python2.7的演示程序):

#coding:utf-8
from flask import Flask, render_template, flash, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app=Flask(__name__)

#项目配置信息
class Config(object):
    DEBUG=True
    #连接mysql数据的信息
    SQLALCHEMY_DATABASE_URI="mysql://root:mysql@127.0.0.1:3306/author_book"
    #让sqlalchemy跟踪数据库的修改
    SQLALCHEMY_TRACK_MODIFICATIONS=True
    SECRET_KEY="DSKFSDJKFHSKDKCNIASNCFIOFASNDCIOSANCIOSNIOCN"


app.config.from_object(Config)

#创建sqlalchemy数据库的连接对象
db=SQLAlchemy(app)


class Author(db.Model):
    __tablename__="tbl_authors"
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),unique=True)
    books=db.relationship("Book",backref="author")

class Book(db.Model):
    __tablename__="tbl_books"
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),unique=True)
    author_id=db.Column(db.Integer,db.ForeignKey('tbl_authors.id'))

class AuthorBookForm(FlaskForm):
    author_name=StringField(label=u"作者",validators=[DataRequired()])
    book_name=StringField(label=u"书籍",validators=[DataRequired()])
    submit=SubmitField(label=u"提交")

@app.route('/',methods=["GET","POST"])
def index():
    form=AuthorBookForm()
    error_msg = ""
    if form.validate_on_submit():
        author_name=form.author_name.data
        book_name=form.book_name.data


        author_count=Author.query.filter_by(name=author_name).count()

        if author_count==0:
            author=Author(name=author_name)
            db.session.add(author)
            db.session.commit()
            book_count=Book.query.filter_by(name=book_name).count()
            if book_count==0:
                book=Book(name=book_name,author_id=author.id)
                db.session.add(book)
                db.session.commit()
            else:
                error_msg=(u"该图书已经存在")
                db.session.delete(Author.query.filter_by(name=author_name)[0])
        else:
            book_count = Book.query.filter_by(name=book_name).count()
            author=Author.query.filter_by(name=author_name)[0]
            if book_count==0:
                book = Book(name=book_name, author_id=author.id)
                db.session.add(book)
                db.session.commit()
            else:
                error_msg = (u"该图书已经存在")

    # 查询数据库
    authors = Author.query.order_by(Author.id.desc()).all()

    return render_template("author_book.html",authors=authors,form=form,error_msg=error_msg)


@app.route("/delete_book/<int:id>")
def delete_book(id):
    book=Book.query.get(id)
    db.session.delete(book)
    db.session.commit()

    return redirect(url_for("index"))

if __name__ == '__main__':
    #删除数据库中所有的表
    db.drop_all()
    #创建所有的表
    db.create_all()

    au_xi=Author(name="郭敬明")
    au_qian=Author(name="韩寒")
    au_san=Author(name="唐家三少")

    db.session.add_all([au_xi,au_qian,au_san])
    db.session.commit()

    bk_xi=Book(name='吞噬星空',author_id=au_xi.id)
    bk_xi2=Book(name="寸芒",author_id=au_qian.id)
    bk_qian=Book(name="缥缈之旅",author_id=au_qian.id)
    bk_san=Book(name="冰火魔厨",author_id=au_san.id)

    db.session.add_all([bk_qian,bk_san,bk_xi,bk_xi2])
    db.session.commit()
    app.run()

下图为项目展示界面:
这里写图片描述

1.首先,我们导入了 Flask 类。这个类的实例将会是我们的 WSGI 应用程序。
2.接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。 如果你使用单一的模块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 ‘main’ 或实际的导入名)。这是必须的,这样 Flask 才知道到哪去找模板、静态文件等等。详情见 Flask 的文档。
3.然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数。
这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
4.最后我们用 run() 函数来让应用运行在本地服务器上。 其中 if name == ‘main‘: 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

该项目可以实现向数据库中添加作者和图书,并且立即显示到当前界面,也可以选择性的删除图书,任何更改都会在展示界面立即更新。
以上就是这个小项目,不做过多解释,读者可以将代码拿走自己调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值