使用flask实现简单地增删改查

增、查询全部

class BookView(Resource):

   def post(self):
       parser = reqparse.RequestParser()
       parser.add_argument('title', type=str, location=['form', 'json'], required=True, help='图书标题不能缺少')
       parser.add_argument('bread', type=int, location=['form', 'json'], default=0, help='输入合法的阅读量')

       # 1. 获取参数
       title = parser.parse_args().get('title')
       bread = parser.parse_args().get('bread')

       # 2. 创建图书对象
       book = Book(title=title, bread=bread)
       # 3. 添加图书对象到事务
       db.session.add(book)

       # 5. 提交事务
       try:
           db.session.commit()
       except:
           return {'msg': '添加失败'}, 500

       # 6. 正常返回
       return {
                  'id': book.id,
                  'title': book.title,
                  'bread': book.bread
              }, 201

   @marshal_with(book_page_fields)
   def get(self):
       parser = reqparse.RequestParser()
       parser.add_argument('page', type=int, location=['args'], default=1, help='输入合法的页码')

       page = parser.parse_args().get('page')

       # 1. 先利用模型类查询,并分页, 得到分页器对象
       pagination = Book.query.paginate(page=page, per_page=2)

       # 2. 返回响应
       return {
           'books': pagination.items,
           'pages': pagination.pages,
           'total': pagination.total
      }

详情、修改、删除

class BookDetailView(Resource):

   def get(self, pk):
       # 1. 通过主键id,查询 图书对象, id对应的数据不存在,得到结果为None
       book = Book.query.get(pk)

       # 2. 如果book图书不存在
       if not book:
           return {
                      'msg': '图书不存在'
                  }, 404
       # 3. 返回对象
       return {
           'id': book.id,
           'title': book.title,
           'bread': book.bread
      }

   def delete(self, pk):
       Book.query.filter_by(id=pk).delete()
       db.session.commit()

       return None, 204

   def put(self, pk):
       parser = reqparse.RequestParser()
       # 1. 根据主键,查询到需要修改的 图书对象
       book = Book.query.get(pk)

       # 2. 判断该图书 是否 存在
       if not book:
           return {
                      'msg': '找不到'
                  }, 404

       # 3. 解析参数,如果没有传递参数,设置 图书的 原属性 为默认值
       parser.add_argument('title', type=str, location=['json', 'form'], default=book.title)
       parser.add_argument('bread', type=int, location=['json', 'form'], default=book.bread)

       # 4. 获取参数,得到字典
       args = parser.parse_args()

       # 5.将对象的值,赋值为 传递的新值
       book.title = args.get('title')
       book.bread = args.get('bread')
       # 6.修改完成,需要提交事务,让修改生效
       db.session.commit()

       return {
                  'msg': '修改成功'
              }, 201

小结

  • 模型类.query.filter_by(字段=值), 结果是一个 查询集

  • 模型类.query.get(主键的值), 结果是一个 对象,不存在,结果为None

  • 模型类.query.get_or_404(主键的值), 结果是一个对象, 不存在,抛出 404异常

  • 模型类.query.all(), 结果是查询集

  • pagination = 模型类.query.paginate(page=xxx, per_page=xxx), 结果是分页器对象

    • pagination.items: 当前页的数据,是一个查询集

    • pagination.pages: 总页码

    • pagination.total: 总的记录数量

posted @ 2021-06-02 09:10  DoomLs  阅读(291)  评论(0)    收藏  举报