zoukankan      html  css  js  c++  java
  • flask内容之数据库的管理

      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)
    图书管理系统(数据库基本的操作)
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 <body>
     8 <form method="post" action="http://127.0.0.1:5000/index">
     9     {{ form.csrf_token() }}<br/>
    10     {{ form.author.label }}{{ form.author }}<br/>
    11     {{ form.book.label }}{{ form.book }}<br/>
    12     {{ form.submit }}<br/>
    13     {% for message in get_flashed_messages() %}
    14         {{ message }}
    15     {% endfor %}
    16 </form>
    17 <br/>
    18 <h1>图书管理界面</h1>
    19 <ul>
    20     {% for  author in authors %}
    21         <li> {{ author.name }}<a href="/delete_author/{{ author.id }}">删除作者</a></li>
    22         <ul>
    23             {% for  book in author.book %}
    24                 <li> {{ book.name }}<a href="/delete_book/{{ book.id }}">删除书名</a></li>
    25             {% endfor %}
    26         </ul>
    27     {% endfor %}
    28 </ul>
    29 
    30 </body>
    31 </html>
    前端展示代码
  • 相关阅读:
    61. Rotate List
    60. Permutation Sequence
    59. Spiral Matrix II ***
    58. Length of Last Word
    57. Insert Interval
    328. Odd Even Linked List
    237. Delete Node in a Linked List
    关于找List的中间Node
    234. Palindrome Linked List
    203. Remove Linked List Elements *
  • 原文地址:https://www.cnblogs.com/cerofang/p/9216303.html
Copyright © 2011-2022 走看看