Python的Restful接口实现-Flask 使用教程 - Go语言中文社区

Python的Restful接口实现-Flask 使用教程


1. Python的rest框架

主要介绍Djangoflask两种。

DjangoPython Web 框架中重量级选手的最具代表性的一位。Django采用了MVC的软件设计模式,即模型M,视图V和控制器CDjango提供了很多的工具,对很多东西也做了封装(比如modelsusersauthentication)

Flask是一个很轻的框架,较为灵活,Flask显著的特点是:它是一个“微”框架。”微”意味着Flask旨在保持核心的简单,但同时又易于扩展。默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。

对于实现一个网站来说,django是个不错的选择。

鉴于我们的项目里主要是为了提供服务接口,不需要view层以及orm层的建设,故使用轻量级的flask是个不错的选择。

2. Flask 使用教程

2.1 安装flask

pip install flask

windows下打开cmd窗口输入命令即可(已安装python环境下)

2.2  使用详解(flask_demo.py)

2.2.1 简单的无参接口

  • 服务功能:输出Hello World!
  • 代码如下:
  • import json
    from flask import Flask, abort, request, jsonify
    
    app = Flask(__name__)#创建实例
    
    # 任务测试数据暂时存放
    tasks = []
    
    #无参接口
    @app.route('/HelloWorld')
    def hello_world():
        return "Hello World!"

     

  • Postman发送请求验证:

2.2.2 Post请求,json数据获取方式:request.json[]

  • 服务功能:发送任务信息的json数据,如:{"id":"1","info":"firstTask"},服务根据请求传输的json数据生成任务并添加到任务列表
  • 代码如下:
#添加任务
@app.route('/addTask/', methods=['POST'])
def add_task():
   if not request.json or 'id' not in request.json or 'info' not in request.json:
      abort(400)
   task = {'id': int(request.json['id']),'info': request.json['info']}#获取post请求参数,request.json[]
   tasks.append(task)#添加任务到任务列表
   return jsonify({'result': 'success'})
  • Postman发送请求验证

返回结果:

2.2.3 get请求,参数获取方式:request.args[]

  • 服务功能:获取指定id的任务
  • 代码如下:
    #获取任务
    @app.route('/getTask/', methods=['GET'])
    def get_task():
        if not request.args or 'id' not in request.args:
            # 没有指定id则返回全部
            return jsonify(tasks)
        else:
            task_id = request.args['id']#获取get请求参数,request.args[]
            task = filter(lambda t: t['id'] == int(task_id), tasks)#获取指定id的任务
            task = list(task)#需做类型转换
            return jsonify(task) if task else jsonify({'result': 'not found'})

     

  • Postman发送请求验证:
  •  (1) 获取id为1的任务
  • (2)不提供id参数则获取全部任务

2.3 启动方式

2.3.1 通过main函数启动

这种是不太推荐的启动方式,可以在debug阶段使用。

if __name__ == "__main__":
    # 将host设置为0.0.0.0(host="0.0.0.0",),则外网用户也可以访问到这个服务
    app.run( port=8383, debug=True)#可在此指定端口号,默认端口为5000

2.3.2 使用指令的启动方式

(参见http://flask.pocoo.org/docs/0.12/quickstart/#a-minimal-application

$ export FLASK_APP=flask_demo.py
$ python -m flask run –-port=8383

注:windows下将export换成set即可

 

3. FLASK的Restful扩展库

Falsk restful框架的功能主要体现在可以设置一个url的不同请求方式对应的操作,而无需自定义多个接口路由信息。这个框架用Resource类将封装好了http的各种请求,只需定义一下对应的函数即可,返回值也是可以直接丢对象过去,写好接口类用API配置一下路径就可以。

 

3.1 安装restful扩展库

pip install flask-restful

3.2 使用详解(flask_restful_demo.py)

  • 创建接口类并定义不同请求方式的处理逻辑
    app = Flask(__name__)#创建app实例
    api = Api(app)#创建接口实例
    
    # 获取请求中的task参数
    parser = reqparse.RequestParser()
    parser.add_argument('task')#入口参数声明
    
    # Todo
    # 对单个任务的获取、删除、更新
    class Todo(Resource):
        def get(self, todo_id):
            abort_if_todo_doesnt_exist(todo_id)
            return TODOS[todo_id]
    
        def delete(self, todo_id):
            abort_if_todo_doesnt_exist(todo_id)
            del TODOS[todo_id]
            return '', 204
    
        def put(self, todo_id):
            args = parser.parse_args()
            task = {'task': args['task']}
            TODOS[todo_id] = task
            return task, 201
    
    ##
    ## 设置Api路由信息
    ##
    api.add_resource(TodoList, '/todos')
    api.add_resource(Todo, '/todos/<todo_id>')

     

 

  • Postman验证

        1.查询单任务:

https://upload-images.jianshu.io/upload_images/35286-20d8616c4b067fc5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/440

 

        2. 更新任务:

 

 

        3. 删除任务

https://upload-images.jianshu.io/upload_images/35286-c69db9463e4a8d7d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700

附:Postman工具,用于发送http请求

CSDN的下载区有资源。

我的百度云盘:

链接:https://pan.baidu.com/s/1Zg4eeBcPSlGlmfjK-BXtNw 
提取码:6unp 
复制这段内容后打开百度网盘手机App,操作更方便哦

代码github地址:

flask_demo.py和flask_restful_demo:

(晚点上传到github之后补上)

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41079550/article/details/89199923
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢