zoukankan      html  css  js  c++  java
  • 运用flask、flask-restful开发rest风格的接口,并使用蓝图增加代码的延展性和可扩展性。

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

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

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

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

  • 相关阅读:
    Learning Spark中文版--第三章--RDD编程(1)
    关于learning Spark中文版翻译
    dom4j 常用操作
    Invalid bound statement (not found)
    touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
    docker 运行tomcat 并部署 java web项目
    docker build no such file or directory
    Docker 笔记
    java 自动拆箱 自动装箱
    Ubuntu18 中文乱码 问题 解决
  • 原文地址:https://www.cnblogs.com/Alin-2016/p/11065322.html
Copyright © 2011-2022 走看看