Flask+mysql 实现增删改查接口开发+测试(图文教程附源码)

目录

一、前言

二、环境准备

2.1 安装python

2.2 安装mysql 

三、工具准备

3.1 安装pycharm

3.2 安装Navicat

3.3 安装postman

四、mysql数据库准备

4.1 Navicat连接

4.2 数据库准备

五、增删改查接口(服务)开发

5.1 表的增删改查操作 

5.2 增加接口服务

5.3 删除接口服务

5.4 修改接口服务

5.5 查询接口服务

六、接口测试

 6.1 测试增加接口服务

 6.2 测试删除接口服务

 6.3 测试修改接口服务

 6.4 测试查询接口服务

七、总结

八、展望

九、附录(源代码)


一、前言

       1.1 之前在练习了Django的博客项目,前后端不分离的,现在就想着把Flask框架也再熟悉一下,后续把接口返回的数据用vue显示。python 比较流行的框架是Django 和Flask,重要性不言而喻

       1.2 刚好是五一,发文符合劳动节精神,深圳又下雨,在家搬砖

二、环境准备

2.1 安装python

       确保你的电脑安装了python,并正确配置好环境变量。查看版本命令:

python -V

本文内容运行在python 3.6.1

2.2 安装mysql 

       确保你的电脑安装了mysql,并正确设置账号和密码,本机账号和密码为 root/root

mysql -V

本文内容mysql 5.7中运行通过

三、工具准备

3.1 安装pycharm

       确保你的电脑安装了pycharm,我这里用的是pycharm professional 2017.3(已pojie)

3.2 安装Navicat

       可视化数据库查询工具准备,工具很多,本文用的是拿手的Navicat 

3.3 安装postman

        postman是一款必会的工具,开发和测试都在用

四、mysql数据库准备

4.1 Navicat连接

       连接名起一个test,主机输入localhost或者127.0.0.1,默认端口3306,输入用户名和密码root/root,点击链接测试,链接成功

4.2 数据库准备

       在链接上test数据源后,在test处右键,新建数据库,数据库名books,字符集utf-8,排序规则选择utf8_general_ci,点击确认,数据新建完成

 

注意:此处不新建表,从代码里面通过模型类建表 

五、增删改查接口(服务)开发

       开发前先做一些准备工作,新建flask项目,file ->new project

 创建完成。我这里book是根目录,主文件我改名字app.py,不该也可以此时就可以右键启动了

控制台会打印 访问地址,点击访问 浏览器页面显示 Hello World!,我这里代码删了不贴图了。

 安装一些用的库,点击file->settings,flask、PyMySQL、SQLAlchemy、flask-sqlalchemy等(注意有些库使用的时候的名字和导入的时候的名字不一样,比如导入flask-sqlalchemy,代码里面却是flask_sqlalchemy)

接着,逐步把以下代码添加到app.py文件中。先导入一些要用到的库

import pymysql
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask import make_response,request
from flask_cors import CORS
pymysql.install_as_MySQLdb()

数据库设计,使用flask框架模型类添加,代码如下

先连接数据库,修改账号、密码、主机名、端口号、数据库名为你们使用的即可

app = Flask(__name__)
# ------------------database----------------------------
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost:3306/books'
# 指定数据库文件
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 允许修改跟踪数据库
db = SQLAlchemy(app)

模型类代码:下面建立一个books表,字段有id、title、author、read_status,注意字段大小和类型,这些都是事先要把需求确定好,不然测试肯定有问题。比如:有需求说作者不能超过20个字,下面这种设计120大小就不合适。这就是实际开发和学习的区别

class Books(db.Model):
    id = db.Column(db.Integer, primary_key=True, comment='自动递增id,唯一键')
    title = db.Column(db.String(80), nullable=False, comment='书名')
    author = db.Column(db.String(120), nullable=False, comment='作者')
    read_status = db.Column(db.Boolean, comment='阅读状态,0未读,1已读')

通过下面这行代码把表创建好

db.create_all()  # 创建表(表创建好后可注释掉)

查看数据库表DDL

 

5.1 表的增删改查操作 

       以下是增删改查方法代码:

# 增加数据
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()

插播,以下代码解决跨域问题(这是我为后面准备开发页面用的)

# 解决浏览器浏览器访问输出乱码问题
app.config['JSON_AS_ASCII'] = False


@app.after_request
def after(resp):
    resp = make_response(resp)
    resp.headers['Access-Control-Allow-Origin'] = '*'  # 允许跨域地址
    resp.headers['Access-Control-Allow-Methods'] = '*'  # 请求 ‘*’ 就是全部
    resp.headers['Access-Control-Allow-Headers'] = 'x-requested-with,content-type'  # 头部
    resp.headers['Access-Control-Allow-Credentials'] = 'True'
    return resp


CORS(app, resources=r'/*', supports_credentials=True)

5.2 增加接口服务

       讲增加接口服务前,定义以下需要传的参数title、author、read_status,title不能重复,

title、author、read_status是必传参数,title、author不能为空,read_status阅读状态只能为0和1

后续测试场景就从这里来,后面的同理

# 前端通过传参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()
        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'] = &#
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试李同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值