flask项目之图书案例

今天通过一个图书小案例来演示一下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:[email protected]: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/")
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()

下图为项目展示界面:
flask项目之图书案例_第1张图片

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

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

你可能感兴趣的:(Flask)