Python中Flask-RESTful编写API接⼝(⼩⽩⼊门)
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(端⼝)的理解:
简单理解是:
url通过endpoint来去查视图函数(通常endpoint的名字与视图函数名⼀致),但是如果不⼀致的时候,就需要有针对性的指定某个视图函数去执⾏,也或者多个蓝图⾥⾯有⼀样的视图函数的场景下,需要指定具体的endpoint
4.API接⼝:参数解析
官⽅⽂档:
(1)尽管 Flask 能够简单地访问请求数据(⽐如查询字符串或者 POST 表单编码的数据),验证表单数据仍然很痛苦。Flask-RESTful 内置了⽀持验证请求数据,它使⽤了⼀个类似 argparse 的库。
(2)需要注意地是与 argparse 模块不同,reqparse.RequestParser.parse_args() 返回⼀个 Python 字典⽽不是⼀个⾃定义的数据结构。
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('task', type=str)
parser.add_argument('name', type=str)
# 获取 & 更新
class Get_Modify(Resource):
def post(self):
args = parser.parse_args()
print(args)
return args, 201
api.add_resource(Get_Modify, '/get_modify')
if __name__ == '__main__':
app.run(debug=True)
step1:从form表单⾥⾯获取定义的参数
解释:
即使传递其他参数,最终也只会读取定义的2个参数的值
通过如上代码说明:reqparse.RequestParser.parse_args(),即如上的args可以获取到request的form表单的参数,最终是⼀个字典
5.API接⼝:案例⼀(在form表单⾥⾯传递参数)
from flask import Flask
from flask_restful import reqparse, abort, Api, Resourcerestful接口调用实例
app = Flask(__name__)
api = Api(app)
Tasks = {
't1': {'task': 'eat an app'},
't2': {'task': 'play football'},
't3': {'task': 'watching TV'},
}
def abort_if_todo_doesnt_exist(t_id):
if t_id not in Tasks:
abort(404, message="Todo {} doesn't exist".format(t_id))
parser = reqparse.RequestParser()
parser.add_argument('task', type=str)
# 获取 & 更新
class Get_Modify(Resource):
def get(self):
return Tasks
def post(self):
args = parser.parse_args()
t_id = int(max(Tasks.keys()).lstrip('t')) + 1
t_id = 't%i' % t_id
Tasks[t_id] = {'task': args['task']}
return Tasks[t_id], 201
# 设置每个视图函数的访问格式
api.add_resource(Get_Modify, '/get_modify')
if __name__ == '__main__':
app.run(debug=True)
解释:
(1)如上的函数,get是获取总的列表Tasks
(2)post是添加最新的⼀个key的值,且key的值是以“t”开头,数字⾃增的⼀种形式
(3)max(Tasks.keys())这个可以获取到Tasks列表⾥⾯,索引最⼤的key值,在没添加的时候,索引最⼤为t3
(4)x_string.lstrip(‘t'),这个可以截取x_string字符串⾥⾯以't'开始的剩余字符串。例如t3最终得到3,最终int(max(Tasks.keys()).lstrip(‘t')) + 1这⼀⾏的意思是,得到列表最⼤的⼀个key的索引,然后⾃增到下⼀个。
(5)在希望在form表单⾥⾯传递参数,需要在函数⾥⾯,使⽤args = parser.parse_args()接收传递的参数,具体key值通过add_argument函数设置
step1:第⼀次get请求,获取原始的Tasks列表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。