上一篇博客,讲述了flask最简单的接口实现demo:Flask优雅的使用教程(1):route
安装
pip install flask
pip install flask_restful
参数校对
在进行接口开发的时候,我们经常是提前约定好参数以及格式,这个时候,参数的校对就可以交给flask去做了,包括必要参数的检验、参数格式的检查等。
总的来说,一般参数的类型有以下几种:
- 普通的字符串、数值、数组等,直接设置对应的类型即可,如
type=str
; - json:包括json里面嵌套json或json数组,可以设置
type=dict
,直接解析为dict; - json数组:这时,同样设置
type=dict
,但是需要增加action='append'
,否则只会得到一个json; - required设置参数是否为必传。
具体代码
catch_all_404s:捕获如参数错误等的404错误类型,一旦404就不会进入代码模块,直接返回;
初始化工作不要放在__init__
方法中,因为每次调用接口,都会实例化一个MyApi(Resource)对象。
# coding=utf-8
from flask import Flask
from flask_restful import Resource, reqparse, Api
# 一些初设化工作
print("do something")
class MyApi(Resource):
"""
每次调用接口实际上是实例化一个MyApi(Resource)对象,所以初设化工作不能在__init__中
"""
def __init__(self):
# 接口参数
self.parser = reqparse.RequestParser(bundle_errors=True)
# json格式的参数,可以设置type=dict,直接解析为dict
# json里嵌套json也同样适用
self.parser.add_argument('para1', location=['json', 'args'], type=dict, trim=True, required=False)
# json数组,需要设置action='append',否则只会捕获到一个json
self.parser.add_argument('para2', location=['json', 'args'], type=dict, trim=True, required=False,
action='append')
# 但,如果是json里面嵌套json数组,则不需要设置action='append'
self.parser.add_argument('para3', location=['json', 'args'], type=str, trim=True, required=True)
self.parser.add_argument('para4', location=['json', 'args'], type=int, required=True)
self.args = self.parser.parse_args()
super(MyApi, self).__init__()
print("__init__")
def post(self):
p1 = self.args['para1']
p2 = self.args['para2']
p3 = self.args['para3']
p4 = self.args['para4']
print("p1: {}\np2: {}\np3: {}\np4: {}".format(p1, p2, p3, p4))
ret = {"message": "success", "status": 1, "data": [1, 2, 3]}
return ret
# def get(self):
# p1 = self.args['para1']
# p2 = self.args['para2']
# p3 = self.args['para3']
# p4 = self.args['para4']
#
# ret = {"message": "success", "status": 1, "data": [1, 2, 3]}
#
# return ret
if __name__ == '__main__':
app = Flask(__name__)
api = Api(app, catch_all_404s=True)
api.add_resource(MyApi, '/api/test/', endpoint='my_api')
app.run(host='0.0.0.0')