drf框架之二次封装Response
我们平时所使用返回的Response
return Response({
'status':0,
'msg':'ok',
'results':serializser.APIBookModelserializer(book_obj).data
},status=200)
如果每次都这样返回,这样就会造成业务逻辑中重复的代码太多。所以我们对它进行二次封装
创建一个 response.py
from rest_framework.response import Response
class APIResponse(Response):
def __init__(self,data_status=0,data_msg='ok',results=None,http_status=None,headers=None,exception=False,**kwargs):
data = {
'status':data_status,
'msg':data_msg
}
#如果又返回结果就将返回结果赋给到data中
if results is not None:
data["results"] = results
#如果传递其他的参数,将会被放到kwargs中被接收
if kwargs is not None:
for k,v in kwargs.items():
#采用反射的方法,去赋值
setattr(data,k,v) #data[k] = v
super().__init__(data=data,status=http_status,headers=headers,exception=exception)
整体的思路
1)创建一个类继承 Response这个类
2)重写Response的初始化方法
3)继承 Response中的初始化方法,返回值就是(self),对我们自定义中的类进行赋值,在这里就是将data中的数据封装成一个字典形式
所以在我们调用的时候直接:
res = serializser.V2BookModelserializer(book_objs,many=True).data
return APIResponse(1,'True',results=res)