ViewSetMixin 做了些什么?

urls = MyViewSet.as_view({'get': 'list', 'post': 'create'})
class ViewSetMixin:
     
    @classonlymethod
    def as_view(cls, actions=None, **initkwargs):
         def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            if 'get' in actions and 'head' not in actions:
                actions['head'] = actions['get']
            self.action_map = actions # self.action_map -> {"get':"list"}
            for method, action in actions.items(): # 遍历url里面的action字典get,list
                handler = getattr(self, action) # getattr(obj,attr)获取对象的属性值 -> handler="list or create.."
                setattr(self, method, handler)# setattr(object,get,list) ->
            self.request = request
            self.args = args
            self.kwargs = kwargs
            # And continue as usual
            return self.dispatch(request, *args, **kwargs) # 调用APIVIEWdispatch
        return view




# 复写了APIVIEW里面的initialize_request
def initialize_request(self, request, *args, **kwargs):
        """
        Set the `.action` attribute on the view, depending on the request method.
        """    
        request = super().initialize_request(request, *args, **kwargs) #调用APIVIEW里面的initialize_request
        method = request.method.lower()
        if method == 'options':
            self.action = 'metadata'
        else:
            #  self.action_map -> {"get':"list"}
            #  追加了action这个字段 -> self.action= "list"
            self.action = self.action_map.get(method)  
        return request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值