gpt4 book ai didi

python - 使用 Django REST 框架定义过滤端点的更好方法

转载 作者:行者123 更新时间:2023-11-28 22:53:45 24 4
gpt4 key购买 nike

我在用户和图片之间建立了关系,每个用户都可以拥有多张图片。我需要定义一个端点来检索特定用户的所有图像:

GET/users/:id/images

我是这样做的:

urls.py

router = routers.DefaultRouter()
router.register(r'images', ImageViewSet)

image_list = ImageViewSet.as_view({
'get': 'list'
})

urlpatterns = patterns('',
...
url(r'^', include(router.urls)),
url(r'^users/(?P<user_id>[^/]+)/images/$', image_list),
...
)

图片/views.py

class ImageViewSet(viewsets.ModelViewSet):
queryset = Image.objects.all()
serializer_class = ImageSerializer

def get_queryset(self):
user_id = self.kwargs.get('user_id', None)
if user_id:
return Image.objects.filter(user_id=user_id)
return super(ImageViewSet, self).get_queryset()

它有效,但我对此并不满意。想象一些类似于 /users/:user_id/images/ 的附加端点,即类似于 /categories/:category_id/images/ 等的东西。 get_queryset 作为这两者的入口点,让它根据 kwargs 来区分它们,似乎不太吸引人。有更好的方法吗?

最佳答案

在基本情况下,您最终会指定一个模型和一个序列化程序类。没有理由不能将这两者放在某种表格中并使用 kwargs 进行查找。

LOOK_UP_TABLE = {
'users' : {
'model': ...,
'serializer_class': ...,
},
'categories' : {
...
},
}

如果您这样做,以及覆盖 get_queryset,您也可以覆盖 get_serializer_class。然后你会有一些非常通用的东西。

我不知道您真正节省了多少输入(特别是如果您使用编辑器的代码片段功能)。或者最终系统的灵 active 。但这是一个有趣的想法。

关于python - 使用 Django REST 框架定义过滤端点的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072885/

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