微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flask图书练习

#_*_ encoding: utf-8 _*_   @author: ty  hery   2019/12/20
from  flask import Flask, render_template, request, url_for, redirect
from flask_sqlalchemy import sqlAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Datarequired


app = Flask(__name__)

#设置连接数据库的URL
app.config['sqlALCHEMY_DATABASE_URI'] = 'MysqL://root:[email protected]:3306/flask_test'

# 设置每次请求结束后会自动提交数据库中的改动
app.config['sqlALCHEMY_COMMIT_ON_TEARDOWN'] = True

# 查询时会显示原始sql语句
app.config['sqlCHEMY_ECHO'] = True


class  Config(object):
    # 设置连接数据库的参数
    sqlALCHEMY_DATABASE_URI = "MysqL://root:[email protected]:3306/flask_test"

    # 设置sqlalchemy自动跟踪数据库
    sqlALCHEMY_TRACK_MODIFICATIONS = True

    # 设置每次请求结束后会自动提交数据库中的改动
    # sqlALCHEMY_COMMIT_ON_TEARDOWN = True

    # 查询时会显示初始sql语句
    # sqlALCHEMY_ECHO = True

    SECRET_KEY = 'doios87fsdaf7asdf6asfjljoewg'

app.config.from_object(Config)

db = sqlAlchemy(app)

class Author(db.Model):
    #  定义表名
    __tablename__='tbl_authors'

    id = db.Column(db.SmallInteger, primary_key=True)
    name = db.Column(db.String(8),unique=True)
    books = db.relationship('Book',backref='author')

class Book(db.Model):
    '''用户表'''
    __tablename__ = 'tbl_books' # 指明数据库的表名

    id = db.Column(db.SmallInteger, primary_key=True)
    name = db.Column(db.String(8),unique=True)
    author_id = db.Column(db.SmallInteger, 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'保存')

print('当前的__name__ :',__name__ )


@app.route('/', methods=['GET', 'POST'])
def index():
    # 创建表单对象
    form = AuthorBookForm()
    if form.validate_on_submit():
        # 验证表单成功
        # 提取表单数据
        author_name = form.author_name.data
        book_name = form.book_name.data
        print('作者,书名: ',author_name,book_name,'------------')
        # 保存到数据库
        author_01 = Author(name=author_name)
        db.session.add(author_01)
        db.session.commit()

        book = Book(name = book_name, author_id = author_01.id)
        # book = Book(name = book_name, author = author_01) # 此处的author是反向引用的author
        db.session.add(book)
        db.session.commit()

    # 查询数据库form
    author_li = Author.query.all()
    return render_template('author_book.html', authors = author_li, form = form)


@app.route('/delete_book',methods=['POST'])
def delete_book():
    '''删除数据'''
    # 如果前端发送是请求体数据是json格式, get_json会解析成字典
    req_dict = request.get_json()
    book_id = req_dict.get('book_id')

    # 删除数据
    book = Book.query.get(book_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='唐家三少')
    # # session记录对象任务
    # 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_xi, bk_xi2, bk_qian, bk_san])
    # # 提交任务到数据库中
    # db.session.commit()
    app.run(debug = True)

author_book.html

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post">
    {{ form.csrf_token }}

        {{ form.author_name.label }}
        <p>{{ form.author_name }}</p>
        {% for  msg in form.author_name.errors %}
            <p>{{ msg }}</p>
        {% endfor %}

    {{ form.book_name.label }}
        <p>{{ form.book_name }}</p>
        {% for msg in form.book_name.errors %}
            <p>{{ msg }}</p>
        {% endfor %}

    {{ form.submit }}
    </form>
    <hr/>

    <ul>
        {% for author in authors %}
        <li>作者:{{ author.name }}</li>

        <ul>
            {% for book in author.books %}
            <li>书籍:{{ book.name }}</li>
                <a href="javascript:;" onclick="deleteBook({{ book.id }})">删除</a>
            {% endfor %}
        </ul>
    {% endfor %}

    </ul>
    <script type="text/javascript" src="/statics\js\jquery-3.3.1.min.js"></script>

</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐