Django的:同样的方法不同的URL

问题描述:

我的网址是这样的:Django的:同样的方法不同的URL

/api/v1/files/ 
/api/v1/files/100 

是否使用相同的功能,以配合他们一个好的做法呢?就像下面这样:

class FileView(APIView): 
    parser_classes = (MultiPartParser,) 
    permission_classes = (IsAuthenticated,) 

    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(FileView, self).dispatch(request, *args, **kwargs) 

    def post(self, request, pk = None): 
     if pk is not None: 
      Do something 
     else: 
      do something 

如何在基于类的视图中使用不同的函数? 谢谢

我认为有单独的方法比基于pk分支的单一方法更清洁。通过查看视图的方法而不是遵循(尽管简单的)控制流程,更容易理解哪个逻辑是通过哪里进行的。

我的第一个建议是查看viewsets that Django Rest Framework provides并查看它提供的给定方法内的执行逻辑。这看起来最适合你的用例。

另一种选择是查看基于these mixins的DRF的generic views。这些允许比视图集更多的控制和定制,并且如果不需要视图集提供的所有功能,则有时候这是更好的选择。

+0

我已经使用post/get/delete /。在这种情况下PUT不适合。我会读你的参考。谢谢 – BAE

+0

视图提供诸如'list','retrieve'和'create'等方法。所以,例如'create'处理一个POST到你的'/ files /'端点,'retrieve'处理一个GET到你的'/ files/100'端点,'list'处理一个GET到'/ files /'端点。出于好奇,你希望你的POST到'/ files/100'做什么? – Jeff

+0

更新File对象的某个字段 – BAE