当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Python中Flask-RESTful编写API接口(小白入门)

    栏目:Linux/apache问题 时间:2019-12-11 22:49

    1.API接口:hello world 案例

    from flask import Flask
    from flask_restful import Api, Resource
    
    app = Flask(__name__)
    api = Api(app)
    
    class HelloWorld(Resource):
     def get(self):
      return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
     app.run(debug=True)

    这里写图片描述

    2.API接口:Resource充当路由的角色

    官方文档的说法:
    Flask-RESTful 提供的最主要的基础就是资源(resources)。资源(Resources)是构建在 Flask 可拔插视图 之上,只要在你的资源(resource)上定义方法就能够容易地访问多个 HTTP 方法.

    其实就是想表达,在资源路由上(resources)定义多个方法(get,post,put等),就可以实现多种效果

    from flask import Flask, request
    from flask_restful import Api, Resource
    
    app = Flask(__name__)
    api = Api(app)
    
    todos = {}
    
    class TodoSimple(Resource):
     def get(self, todo_id):
      return {todo_id: todos[todo_id]}
    
     def put(self, todo_id):
      todos[todo_id] = request.form['data']
      return {todo_id: todos[todo_id]}
    
    api.add_resource(TodoSimple, '/<string:todo_id>')
    
    if __name__ == '__main__':
     app.run(debug=True)

    解释:
    (1)TodoSimple类定义了2种方法,最终地址/string:todo_id'下面,就可以实现2种请求方法
    (2)add_resource方法中第一个参数:视图函数名;第二个参数:路由的具体地址,以及string:todo_id代表传递的是一个字符串,且是必要参数。
    (3)request.form[‘data']获取request里面,form表单的key为data的参数,如果request里面,没有data参数,那报错。如果有包含data的多个参数,那也只会取data这一个参数

    step1:为字典todos定义参数,key为todo1

    这里写图片描述

    step2:获取todos里面的todo1的参数

    这里写图片描述

    step3:更新老的数据,多传递其他参数

    这里写图片描述

    step4:获取最新的参数:

    这里写图片描述

    step5:不传递data参数,查看报错情况:

    这里写图片描述

    3.API接口:endpoint(端口)的理解:

    这个问题详情可以参考如下博文,已经解释很详细了:
    https://www.jb51.net/article/176173.htm

    简单理解是:
    url通过endpoint来去查找视图函数(通常endpoint的名字与视图函数名一致),但是如果不一致的时候,就需要有针对性的指定某个视图函数去执行,也或者多个蓝图里面有一样的视图函数的场景下,需要指定具体的endpoint

    4.API接口:参数解析

    官方文档:
    (1)尽管 Flask 能够简单地访问请求数据(比如查询字符串或者 POST 表单编码的数据),验证表单数据仍然很痛苦。Flask-RESTful 内置了支持验证请求数据,它使用了一个类似 argparse 的库。
    (2)需要注意地是与 argparse 模块不同,reqparse.RequestParser.parse_args() 返回一个 Python 字典而不是一个自定义的数据结构。