1 #! /usr/bin/env python
2 # *-* coding: utf-8 *-*
3
4
5 from flask import Flask, flash, redirect
6 from flask import url_for
7 from flask import request
8 from flask_wtf import FlaskForm
9 from wtforms import StringField, SubmitField
10 from wtforms.validators import InputRequired
11 from flask import render_template
12 from flask_sqlalchemy import SQLAlchemy
13
14 app = Flask(__name__)
15
16 # 配置数据库连接地址
17 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:qw123666@localhost/test?charset=utf8"
18 # 是否追踪数据库的修改
19 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
20 app.config["SQLALCHEMY_ECHO"] = False
21 app.secret_key = "123456"
22
23 # 初始化 SQLAlchemy 对象
24 db = SQLAlchemy(app)
25
26
27 # 定义模型类-作者
28 class Author(db.Model):
29 __tablename__ = 'author'
30 id = db.Column(db.Integer, primary_key=True)
31 name = db.Column(db.String(32), unique=True)
32 book = db.relationship('Book', backref='author')
33
34 # def __repr__(self):
35 # return 'Author:%s' % self.name
36
37
38 # 定义模型类-书名
39 class Book(db.Model):
40 __tablename__ = 'books'
41 id = db.Column(db.Integer, primary_key=True)
42 name = db.Column(db.String(32))
43 author_id = db.Column(db.Integer, db.ForeignKey(Author.id))
44
45 # def __str__(self):
46 # return 'Book:%s,%s' % (self.info, self.lead)
47
48
49 class AddBookForm(FlaskForm):
50 author = StringField("作者", validators=[InputRequired("请输入作者名")])
51 book = StringField("书名", validators=[InputRequired("请输入书名")])
52 submit = SubmitField("添加")
53
54
55 @app.route("/index", methods=["get", "post"])
56 def index():
57 # 获取所有的作者
58 bookform = AddBookForm()
59 if request.method == "POST":
60 # 取值
61 if bookform.is_submitted():
62 author_name = bookform.author.data
63 book_name = bookform.book.data
64 # 查指定作者的名字是否存在
65 author = Author.query.filter(Author.name == author_name).first()
66 if not author:
67 try:
68 # 增加作者
69 author_obj = Author(name=author_name)
70 db.session.add(author_obj)
71 db.session.commit()
72 # 增加书名
73 book_obj = Book(name=book_name, author_id=author_obj.id)
74 db.session.add(book_obj)
75 db.session.commit()
76 except Exception as e:
77 db.session.rollback()
78 flash("添加失败")
79 else:
80 try:
81 book_obj = Book(name=book_name, author_id=author.id)
82 db.session.add(book_obj)
83 db.session.commit()
84 except Exception as e:
85 db.session.rollback()
86 flash("添加失败")
87 # 往数据开中写入值
88 authors = Author.query.all()
89 return render_template("index.html", authors=authors, form=bookform)
90
91 authors = Author.query.all()
92 return render_template("index.html", authors=authors, form=bookform)
93
94
95 @app.route("/delete_author/<author_id>")
96 def delete_author(author_id):
97 author_obj = Author.query.get(author_id)
98 if author_obj:
99 try:
100 Book.query.filter(Book.author_id == author_id).delete()
101 db.session.delete(author_obj)
102 db.session.commit()
103 except Exception as e:
104 print("删除作者名失败")
105 db.session.rollback()
106 else:
107 flash("没有这个作者")
108 authors = Author.query.all()
109 bookform = AddBookForm()
110
111 return redirect(url_for('index'))
112
113
114 @app.route("/delete_book/<book_id>")
115 def delete_book(book_id):
116 try:
117 # 书的对象
118 book_obj = Book.query.get(book_id)
119 print(book_obj)
120 # 书的作者的id
121 author_id = book_obj.author.id
122 # author_id = book_obj.Author.id
123 print(author_id)
124 if book_obj:
125 db.session.delete(book_obj)
126 author_count = len(book_obj.author.book)
127 if author_count == 0:
128 # author_obj = Author.query.get(author_id)
129 author_objs = Author.query.filter(Author.id == author_id).all()
130 print("author_obj", author_objs)
131 for author_obj in author_objs:
132 db.session.delete(author_obj)
133
134 except Exception as e:
135 print("没有这本书")
136 db.session.commit()
137
138 authors = Author.query.all()
139 bookform = AddBookForm()
140 return render_template("index.html", authors=authors, form=bookform)
141
142
143 if __name__ == '__main__':
144 app.run(debug=True)