如何修改DRF viewset中action的URL路径,使其支持.jpg格式后缀
问题解答
完全可以实现该需求,DRF的@action装饰器原生支持自定义路径匹配规则,常用实现方式有两种:
方式一:固定后缀匹配
如果只需要支持.jpg后缀,直接在@action装饰器中指定url_path参数即可:
from rest_framework.decorators import action from rest_framework.response import Response from rest_framework import viewsets class YourModelViewSet(viewsets.ModelViewSet): # 原有视图逻辑省略 @action(detail=True, methods=['get'], url_path='image.jpg') def image(self, request, pk=None): # 你的图片生成、读取逻辑 image_content = get_target_image(pk) return Response(image_content, content_type='image/jpeg')
配置完成后生成的路由就会是你需要的path/to/api-point/<资源ID>/image.jpg格式,不需要修改其他路由配置。
方式二:多后缀动态匹配
如果后续需要支持.png、.webp等多种图片格式,可以在路径规则中增加后缀参数捕获:
@action(detail=True, methods=['get'], url_path=r'image\.(?P<suffix>jpg|png|webp)') def image(self, request, pk=None, suffix=None): # 根据suffix参数返回对应格式的图片 image_content = get_target_image(pk, img_format=suffix) return Response(image_content, content_type=f'image/{suffix}')
注意:如果你的Django配置了
APPEND_SLASH = True,该规则不会受影响,DRF的路由生成逻辑会优先匹配自定义的url_path规则,不会自动补斜杠导致404。
内容的提问来源于stack exchange,提问作者Mohammad Reza Bozorgmehr
相关产品推荐
相关产品推荐

