drf框架之二次封装Response

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)

猜你喜欢

转载自blog.csdn.net/qq_42992704/article/details/105452058
今日推荐