flask+mysql实现书本数据的基本增删改查接口

[原文链接]https://blog.csdn.net/qq_29720657/article/details/124522898)
环境配置好了的话,可以直接从五开始看

学习前提:

python基础+面向对象基础+数据库基础(mysql)+ 安装flask相关软件包 + 接口测试工具(postman等)

源码地址 、博客地址

http://192.168.50.137/file/app.py
http://192.168.50.137/file/1.md

数据层代码

数据层代码
# 增加数据
def insert_data(title, author, read_status):
    book = Books(title=title, author=author, read_status=read_status)
    db.session.add_all([book])
    db.session.commit()


# 查询所有
def select_data_all():
    book_list = []
    books = Books.query.all()
    # 类似于 select * from Books

    for s in books:
        dic = {}
        dic['id'] = s.id
        dic['title'] = s.title
        dic['author'] = s.author
        dic['read_status'] = s.read_status
        book_list.append(dic)
    return book_list


# 通过id查询
def select_data_by_id(id):
    book = Books.query.get(id)
    if not book:
        return False
    dic = {}
    dic['id'] = book.id
    dic['title'] = book.title
    dic['author'] = book.author
    dic['read_status'] = book.read_status
    return dic


# 通过id删除数据
def delete_data(id):
    # 类似于 select * from Books where id = id
    delete_id = Books.query.get(id)
    if not delete_id:
        return False
    db.session.delete(delete_id)
    db.session.commit()
    # 提交操作到数据库


# 修改数据
def update_data(id, title='', author='', read_status='', new_id=''):
    book = Books.query.get(id)
    if not title == '':
        book.title = title
    if not author == '':
        book.author = author
    if not read_status == '':
        book.read_status = read_status
    if not new_id == '':
        book.id = new_id
    db.session.commit()

业务层代码

业务层代码是锻炼编程能力的,就跟平时写控制台逻辑一样
# 前端通过传参title、author、read_status增加书籍
@app.route('/add', methods=['POST'])
def add():
    response_object = {'status': 'success'}
    if request.method == 'POST':
        post_data = request.get_json()
        print('调用add方传过来的参数是', post_data)
        book_list = select_data_all()
        # print(book_list)
        for i in range(len(book_list)):
            title_list = book_list[i]['title']
        if post_data.get('title') in title_list:
            response_object['message'] = '书名(title)重复!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('title') is None:
            response_object['message'] = 'title是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('author') is None:
            response_object['message'] = 'author是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('read_status') is None:
            response_object['message'] = 'read_status是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        title = str(post_data.get('title')).strip(),
        author = str(post_data.get('author')).strip(),
        read_status = post_data.get('read_status')

        if title[0] is None or title[0] is '':
            response_object['message'] = 'title不能为空!'
            response_object["status"] = 'fail'
            return response_object
        if author[0] is None or author[0] is '':
            response_object['message'] = '作者不能为空!'
            response_object["status"] = 'fail'
            return response_object
        if read_status != 0 and read_status != 1:
            response_object['message'] = '阅读状态只能为0和1!'
            response_object["status"] = 'fail'
            return response_object
        insert_data(title=title[0], author=author[0], read_status=read_status)
        response_object['message'] = '图书添加成功!'
    return response_object


# 前端通过传id删除书籍
@app.route('/delete', methods=['DELETE'])
def delete():
    response_object = {'status': 'success'}
    if request.method == 'DELETE':
        post_data = request.get_json()
        print('调用delete方传过来的参数是:', post_data)
        if post_data.get('id') is None:
            response_object['message'] = 'id是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        id = post_data.get('id')
        result = delete_data(id)  # 删除方法调用
        if result is False:
            response_object['message'] = '需要删除的图书不存在!'
            response_object["status"] = 'fail'
            return response_object
        else:
            response_object['message'] = '图书被删除!'
            return response_object


# 前端通过传参title、author、read_status修改书籍
@app.route('/update', methods=['POST'])
def update():
    response_object = {'status': 'success'}
    if request.method == 'POST':
        post_data = request.get_json()
        print('调用update方传过来的参数是', post_data)
        if post_data.get('id') is None:
            response_object['message'] = 'id是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('title') is None:
            response_object['message'] = 'title是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('author') is None:
            response_object['message'] = 'author是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        if post_data.get('read_status') is None:
            response_object['message'] = 'read_status是必传参数!'
            response_object["status"] = 'fail'
            return response_object
        # 查询所有数据
        book_list = select_data_all()
        # 拼接所有的id到列表
        for i in range(len(book_list)):
            id_list = book_list[i]['id']
        # 判断书籍id在不在列表内
        if post_data.get('id') is not id_list and int(post_data.get('id')) is not id_list:
            response_object['message'] = '需要修改的书籍id不存在!'
            response_object["status"] = 'fail'
            return response_object
        title = str(post_data.get('title')).strip(),
        author = str(post_data.get('author')).strip(),
        read_status = post_data.get('read_status')

        if title[0] is None or title[0] is '':
            response_object['message'] = 'title不能为空!'
            response_object["status"] = 'fail'
            return response_object
        if author[0] is None or author[0] is '':
            response_object['message'] = '作者不能为空!'
            response_object["status"] = 'fail'
            return response_object
        if read_status != 0 and read_status != 1:
            response_object['message'] = '阅读状态只能为0和1!'
            response_object["status"] = 'fail'
            return response_object

        books_id = post_data.get('id')
        title = post_data.get('title')
        author = post_data.get('author')
        read_status = post_data.get('read_status')
        update_data(id=books_id, title=title, author=author, read_status=read_status)
        response_object['message'] = '图书已更新!'
        return response_object


# 前端通过不传参默认查询所有书籍,传id查询对应书籍
@app.route('/query', methods=['POST'])
def query():
    response_object = {'status': 'success'}
    if request.method == 'POST':
        post_data = request.get_json()
        print('调用query方传过来的参数是', post_data)
        if post_data.get('id') is None:
            books = select_data_all()
            response_object['message'] = '查询所有书籍成功!'
            response_object['books'] = books
            return response_object
        id = str(post_data.get('id')).strip()
        if id is None or id is '':
            response_object['message'] = 'id不能为空!'
            response_object["status"] = 'fail'
            return response_object
        book = select_data_by_id(id)
        if book is False:
            response_object['message'] = '需要查询的图书不存在!'
            response_object["status"] = 'fail'
            return response_object
        else:
            response_object['message'] = '查询书籍成功!'
            response_object['books'] = book
            return response_object

博客可能存在的问题

问题1:数据库表创建语句放在哪。。。
class封装到哪里 最好的项目结构是怎么样的。。。(结构化代码)

问题2:为什么修改端口配置还是未生效?

问题3:代码点评是不是将代码的优化???
add接口 数据库不能为空

API 测试地址

WxV8 在 Apifox 中邀请你加入团队 flask-book https://app.apifox.com/invite?token=NzjGqEJjmFRb-R9f6JExj

项目实战:
https://blog.csdn.net/m0_65741467/article/details/128071308?ops_request_misc=&request_id=&biz_id=102&utm_term=flask%20mysql&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-8-128071308.nonecase

优化代码:

  1. 将代码结构化,参考flask项目目录结构,不要把所有文件都放在一个目录下。
  2. 对于相应的异常情况进行统一处理,发掘现有代码中可能没有考虑到的异常情况,然后修改代码解决异常。
  3. 完善查询功能,分页查询,条件查询......
  4. 进阶:学会多表联查在项目中如何书写,构建用户表或者其他表能关联Book表,如此你就能完成一个项目的后端开发了。
  5. 进阶2:学会上线项目到服务器,部署项目(可视化控制,宝塔面板
  6. 下附:阿里云学生机免费领取1+6个月(完成任务,即云服务器使用教程即可续领)的方式。
    https://developer.aliyun.com/plan/student
    ps:云服务器相当于一台不会关机的有公网环境的电脑,一般会配置linux版本,完成对项目的部署。云服务器作用颇多,还可以搭建个人博客,放置前端项目等用处,不会部署自己项目的程序员是不合格的。
    我也不知道活动什么时候到期,早点领完促进自己学习。当然没领到的也没事,新人用户买服务器也有很多的优惠。
posted @ 2024-04-08 15:47  Titanicl  阅读(181)  评论(0)    收藏  举报