本人做为一个测试人员,之前也有写过,想要测试好接口,那必须要知道如何开发一个接口的重要性。

之前也写过通flask或者flask-retful开发接口,但那些只是一些最简单的demo,不具有很好延展性和扩展性。

此次我们带一整个完整的demo

使用flask-retfull,orm,蓝图,来让代码更加具有可塑性。

此次我们实现了5个接口,当然笔者还在不断的完善中。文末会贴出代码的git地址,觉得有用的朋友可以关注一下。

首先看一下我们的代码目录:

db:由于运用的是sqlite数据库,此处为存放数据库文件。
file:模拟的上传文件的操作,凡是通过上传文件接口上传的文件都存在此处。
src:
--common : 写一个公共的方法
--module: 存放相关蓝图
--user : user为本项目的一个蓝图。(如有需要可扩展其它蓝图文件,只需要在主app中注册该蓝图及可)
venv : 本项目的虚拟目录
app :主启动文件
models : 数据库orm
settings : 本项目相关设置

  数据库orm的创建,以及flask项目的相关配置,蓝图的使用和注册,这里不过多的讲,我们重点讲一下接口代码的实现方法。

1、查询接口:这里主要是根据名字来查询,并进行了分页的处理。当不传名字参数时,则认为是查询全部数据。

以下是查询使用的orm:

stu=Student.query.filter(and_(Student.name == name, Student.is_del == 0)).paginate(page=page,per_page=num)

参数讲解:name为用户名字,page为页数,per_page为每页条数。

result = []
for s in stu.items:
  result.append(s.to_json())

以上是把查询出来的数据进行遍历并赋值给一个列表以便最后返回。

2、添加接口:是根据提交的数据直接把数据插入到数据表中,此处需要注意的是所有数据不能为空。

stu = Student(name=name, sex=sex, age=age, grade=grade, source=source, face=face)
if name and sex and age and grade and source and face:
try:
db.session.add(stu)
db.session.commit()
return make_result()
except:
return make_result(code=Code.DATA_FAIL)
else:
return make_result(code=Code.PARAM_FAIL)

3、上传文件接口:此处是模拟上传,只是把上传的文件保存到了项目的file文件夹下,但此处需要注意是,定义上传文件参数类型的时候需要导入一个包。

from werkzeug.datastructures import FileStorage

4、删除接口:本着不能随意删除数据的原则,我们在创建表的时候,添加一个is_del字段来确定只条数据是否删除。因此删除接口的本质是把这个字段改为1。

5、修改接口:修改接口的是根据表id,把数据查询出来,然后再根据其要修改的字段来进行修改。(原理上和删除接口一样)此处需要注意的是,修改数据不会所有数据都修改,只会修改其中某一条或几条数据,我们接口定义的是,如果修改才传只参数,不修改则不传,因此:

stu = Student.query.filter(Student.id == id).first()
if stu:
if name or sex or age or grade or source or face:
if name:
stu.name = name
if sex:
stu.sex = sex
if age:
stu.age = age
if grade:
stu.grade = grade
if source:
stu.source = source
if face:
stu.face = face
db.session.add(stu)

有些参数就修改,无则不修改。

最后需要说明一点,因为我们写的rest风格的接口,因此返回的数据应该是json格式的,因此我们在创建Orm数库表时,创建了一个to_json()方法,以供使用。

    def to_json(self):
return {
'id': self.id,
'name': self.name,
'sex': self.sex,
'age': self.age,
'grade': self.grade,
'source': self.source,
'face': self.face,
'is_del': self.is_del
}

以上就是我们所实现的全部接口。

git址址:https://github.com/gfihdx/flask-restful.git

有兴趣的可以去git clone一下,并关注,后期更新。

下次更新目标,多表的联合查询,及查询数据的格式化方法优化。

注:虽然文章拙劣,但转载请注明出处。

最新文章

  1. 网页万能排版布局插件,web视图定位布局创意技术演示页
  2. Linux-awk直接修改原文件
  3. 7.7 使用rollup子句
  4. SAP物料批次管理配置及操作手册(轉載)
  5. 2.Unable to instantiate Action, templateAction, defined for 'template_list' in namespace '/'templateAction
  6. oracle 循环语句
  7. oracle EBS 基于Host并发程序的开发(转)
  8. APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4
  9. 图解WebGL&Three.js工作原理
  10. 微信小程序开发流程
  11. 【原创】大叔经验分享(27)linux服务器升级glibc故障恢复
  12. AJAX如何实现和后端的交互(网页如何与 web 服务器进行通信)
  13. grep -iq 与grep -qi 意思
  14. Codeforces 1019C Sergey's problem 构造
  15. 07-部署Flanneld网络
  16. [转] 学会fetch的用法
  17. Java基础——工厂模式
  18. HTTP请求与响应报文详解
  19. java虚拟机性能监控调优及原则
  20. Base64的好处

热门文章

  1. 转载 -- iOS开发之JSON格式数据的生成与解析
  2. Android 异常解决方法【汇总】
  3. 借助nodejs解析加密字符串 node安装库较python方便
  4. Java for LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal
  5. Java for LeetCode 096 Unique Binary Search Trees
  6. Algorithm: Sieve of Eratosthenes
  7. pkg-config设置
  8. Eclipse for PHP Developers使用笔记
  9. 服务器中判断客户端socket断开连接的方法【转】
  10. <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目