pip install flask-restful
1、基本使用
注意:类视图return
返回的数据为字典,底层会通过from flask_restful import output_json
会自动将字典封装成json对象返回。
# 在restful风格中想返回中文,需要取消ascii编码的配置
app.config["RESTFUL_JSON"] = {"ensure_ascii": False}
# 1、创建组件对象
组件对象 = Api(app)
# 2、定义类视图
class 自定义视图类(Resource):
# 3、组件添加类视图
组件对象.add_resource(视图类, URL资源段)
1.2、类视图的装饰器使用
class DemoResource(Resource):
# 方案1:给视图类中所有方法添加装饰器
# decorator1先调用,但是后执行
# method_decorators = [mydecorator1, mydecorator2]
# 方案2:给指定函数添加指定的装饰器
method_decorators = {
"get": [mydecorator1, mydecorator2],
"post": [mydecorator2]
}
def get(self):
return {"get": "get message"}
def post(self):
return {"post": "post body"}
1.3、请求参数的提取
location="请求对象的属性"
- 属性可以是:
args
(查询字符串)form
、json
、files
、cookies
、headers
- 是否必须传递,默认False,如果设置为True, 不传递会返回400
# 2.定义类视图
class DemoResource(Resource):
def get(self):
# 1.创建解析对象
parser = RequestParser()
# 2.添加解析参数和规则
# location="请求对象的属性" args form json files cookies headers
# required: 默认False, 如果设置为True, 不传递会返回400
parser.add_argument("name", required=True, location='json', type=regex(r'^1[3-9]\d{9}$'))
# 3.开始解析,获取解析结果
ret = parser.parse_args()
# 4.从解析结果中提取参数值
name = ret.name
# name = ret['name']
return {'foo': 'get'}
1.4 序列化响应返回
方案一:marshal
函数 来完成序列化处理
# 序列化规则
# 拓展:Nested:可转换 字典类型属性
user_dict = {
'name': fields.String,
'age': fields.Integer(default=18),
'height': fields.Float,
'list1': fields.List(fields.Integer),
'dict1': {'gender': fields.Boolean}
}
# 2.定义类视图 继承Resource
class DemoResource(Resource):
def get(self):
# 创建模型对象
user = Person()
# 参数1:模型对象
# 参数2:序列化规则字典
return marshal(user, user_dict)
方案二:使用装饰器marshal_with(序列化规则字典)
method_decorators = {
"get": [marshal_with(user_dict)]
}
方案三:自定义将模型类对象转换成字典的方法【推荐使用】
def to_dict(self):
"""
将模型对象转换成字典
:return:
"""
my_dict = {
"name": self.name,
"age": self.age,
"height": self.height,
"mylist": self.mylist,
"mydict": self.mydict,
}
return my_dict
1.5 自定义json的响应格式
flask-restful
提供了api.representation()
装饰器方法, 允许开发者自定义返回的数据格式
1、重写flask_restful
里面的output_json
方法(增加需要定义的响应格式),封装在一个工具文件里,方便以后调用。
2、使用:
3、结果: