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

之前也写过通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一下,并关注,后期更新。

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

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

运用flask、flask-restful开发rest风格的接口,并使用蓝图增加代码的延展性和可扩展性。的更多相关文章

  1. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  2. 使用 Python 和 Flask 设计 RESTful API

    近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Pyt ...

  3. Restful风格API接口开发springMVC篇

    Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...

  4. 在Dubbo中开发REST风格的远程调用(RESTful Remoting)

    rest 在Dubbo中开发REST风格的远程调用(RESTful Remoting)

  5. 使用 Python & Flask 实现 RESTful Web API

    环境安装: sudo pip install flask Flask 是一个Python的微服务的框架,基于Werkzeug, 一个 WSGI 类库. Flask 优点: Written in Pyt ...

  6. SpringBoot RestFul风格API接口开发

    本文介绍在使用springBoot如何进行Restful Api接口的开发及相关注解已经参数传递如何处理. 一.概念: REST全称是Representational State Transfer,中 ...

  7. Flask之RESTFul API前后端分离

    Flask之RESTFul API前后端分离 一:虚拟环境搭建的两种方式 1 pipenv的使用 pip install --user pipenv安装pipenv在用户目录下 py -m site ...

  8. 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod  方法中要加参数cls  如:def search_by_isb ...

  9. 学习python-20191208(1)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频01: 略...... ———————————————————————————————————————————————————————————— 视频02: 搜索需要外部数据源,也就是需要外部的A ...

随机推荐

  1. phpmyadmin内存溢出

    phpmyadmin Fatal error: Allowed memory size of 134217728 bytes 解决方法: 在报错的页面里,加上这句: ini_set('memory_l ...

  2. Android 六大存储

    Android平台进行存储的方式: 一.使用SharedPreferences存储 二.文件存储数据 三.SQLite数据库存储 四.使用ContentProvider存储数据 五.网络存储数据 今天 ...

  3. Awesome Vue.js vue.js学习资源链接大全 中文

    https://blog.csdn.net/caijunfen/article/details/78216868

  4. detached HEAD state

    1 detached HEAD state指的是什么 正常情况下,HEAD指向一个branch,而branch又指向一个commit. detached HEAD state指的是HEAD指针没有指向 ...

  5. python网络爬虫之使用scrapy自动登录网站

    前面曾经介绍过requests实现自动登录的方法.这里介绍下使用scrapy如何实现自动登录.还是以csdn网站为例. Scrapy使用FormRequest来登录并递交数据给服务器.只是带有额外的f ...

  6. C ~ 指针的运算

    一 :取地址运算“&”与取内容运算“*”: 单目运算“&”是取操作对象的地址 , “*”是取指针指向的对象的内容 , 两者互为逆运算 int x , *p ; p = &x ; ...

  7. h大数据

    安全认证 hw HBase安全认证(创建HBaseHolder时认证) String userPrincipal = FeatureContext.INSTANCE.getOrElse(Constan ...

  8. js正則函數 match、exec、test、search、replace、split 使用介紹集合

    match 方法 使用正則表達式模式對字元串執行查找,並將包含查找的結果作為數組返回. stringObj.match(rgExp) 參數 stringObj 必選項.對其進行查找的 String 對 ...

  9. [BZOJ 1095] [ZJOI 2007]Hide 捉迷藏

    在BZ上连续MLE n次后,终于A了. 自己YY的动态点分写法,思路还是很清楚的,但是比较卡内存. 用到了MAP导致复杂度比其他的代码多了一个log,看来需要去借鉴一下别人怎么写的. updata i ...

  10. BZOJ 3990 [SDOI2015]排序

    题解: 首先很容易看出各个操作是互不影响的,即对于一个合法的操作序列,我们可以任意交换两个操作的位置而不影响合法性. 因此我们可以忽略操作先后的影响,只考虑这个操作是否会出现在操作序列中. 如果用2n ...