ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

flask图书练习

2021-04-12 23:35:34  阅读:145  来源: 互联网

标签:name form author flask 练习 db book id 图书


#_*_ 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:666@10.0.0.105:3306/flask_test'

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

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


class  Config(object):
    # 设置连接数据库的参数
    SQLALCHEMY_DATABASE_URI = "mysql://root:666@10.0.0.105: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>

标签:name,form,author,flask,练习,db,book,id,图书
来源: https://www.cnblogs.com/heris/p/14651125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有