gpt4 book ai didi

python - 如何在 Django Rest Framework 中为相同的 View 设置不同的 Urls

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:47 24 4
gpt4 key购买 nike

我的代码中有这样一个序列化器

class SampleSerializer(serializers.ModelSerializer):
class Meta:
model = Model

像这样的Viewset

class SampleViewSet(GenericAPIView):
serializer_class = SampleSerializer

def get(self, request, *args, **kwargs):
pass

def post(self, request, *args, **kwargs):
pass

def put(self, request, *args, **kwargs):
pass

我有这个 View 集的这样的 url

网址#1:

url(r'^sample/$', SampleViewSet.as_view())

这为我的 View 集中的所有方法创建了 url,例如 get、post 和 put 等。我想为我的 get 方法创建单独的 url,但使用相同的序列化程序。这个 url 看起来像这样

网址 #2:

 url(r'^sample/(?P<model_id>\d+)/$', SampleViewSet.as_view())

如何使用相同的 Viewset 和 Serializer 执行此操作?当我在 urls.py 中写入 Url #2 时,Swagger 会向我展示该 Url 的所有三种类型(get、post 和 put)方法。

最佳答案

你可以使用 require_GET来自 django.views.decorators.http 的装饰器,并在您的 URL 配置中使用它:

urlpatterns = [
url(r'^sample/$', SampleViewSet.as_view()),
url(r'^sample/(?P<model_id>\d+)/$', require_GET(SampleViewSet.as_view())),
]

要进行更精细的调整,还有一个 require_http_method在其参数中接收允许的方法的装饰器,例如:

url(r'^sample/(?P<model_id>\d+)/$', require_http_method(['GET', 'DELETE'])(SampleViewSet.as_view()))

参见 https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-in-urlconf了解详情。

关于python - 如何在 Django Rest Framework 中为相同的 View 设置不同的 Urls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com