Django:同样的方法不同的url

时间:2016-08-16 15:53:07

标签: django django-rest-framework django-urls django-class-based-views

我的网址如下:

/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

如何在基于类的视图中使用不同的功能? 感谢

1 个答案:

答案 0 :(得分:1)

我认为使用单独的方法比基于pk分支的单个方法更清晰。通过查看视图的方法而不必遵循(虽然简单)控制流程,更容易理解哪个逻辑在哪里。

我的第一个建议是查看viewsets that Django Rest Framework provides并查看在其提供的给定方法中执行逻辑。这似乎最适合您的用例。

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