簡體   English   中英

DRF-為PATCH請求創建多個端點

[英]DRF - creating multiple endpoints for PATCH request

我想為PATCH請求創建多個端點。

例如。

class CityViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows city to be viewed or edited.
    """
    authentication_classes = (TokenAuthentication,)
    permission_classes = ()
    queryset = City.objects.filter(active=True)
    serializer_class = CitySerializer

class CitySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = City
        fields = ('id', 'name', 'is_metro', 'is_village', 'active')

    def update(self, instance, validated_data):
        for attr, value in validated_data.items():
            if not isinstance(value, (list,dict)):
                setattr(instance, attr, value)

        instance.save()
        return instance

urls.py

router = routers.DefaultRouter()
router.register(r'city', CityViewSet)

我是否可以創建多個路由器,這些路由器最終僅轉到該視圖集的PATCH請求? 在更新方法中,基於URL,我將決定要做什么。

您可以為同一視圖集注冊不同的網址,例如:

router = routers.DefaultRouter()
router.register(r'city', CityViewSet)
router.register(r'town', CityViewSet.as_view({'patch':'partial_update'})

如果您使用的是可瀏覽的API,並且DRF正在創建反向網址,則您可能會在其中找到第一個網址(在上面的示例中,帶有“ city”)

如果只希望使用第二個鏈接的PATCH,則執行.as_view({'patch':'partial_update'})可以防止其他方法訪問它,因為如果嘗試使用任何其他方法訪問它,它將拋出MethodNotAllowed 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM