上下文感知Django REST中的可浏览API呈现

时间:2014-06-23 05:43:44

标签: django django-rest-framework

是否有一种简单的方法可以在Django Rest Browsable API中创建超链接,但在其他API渲染中却没有。为了清楚起见,我希望在通过可浏览的API查看页面时将某些字段呈现为超链接,但仅在通过JSON呈现时呈现文本组件。

此用例的一个示例是将列表视图中的pk呈现为指向详细信息视图的超链接(类似于:http://chibisov.github.io/drf-extensions/docs/#resourceurifield),但仅在以可浏览API模式查看列表视图时执行此操作。在常规的json GET中,我想渲染pk。

我希望通过浏览器访问时,可浏览的API更易用/可导航。

这是否相关:http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

更一般地说,无论如何设置排除依赖于渲染模式吗?

2 个答案:

答案 0 :(得分:3)

您可以通过覆盖get_serializer或其任何子类上的GenericAPIView方法,在不同的上下文中返回不同的序列化程序。

这样的事情是正确的......

def get_serializer(self, ...):
    if self.request.accepted_renderer.format == 'api':
        # Browsable style
    else:
        # Standard style

如果您将该行为编码为mixin类,那么您可以在整个视图中轻松重复使用它。

答案 1 :(得分:1)

我在API模式下创建了这个mixin以使用serializer_class_api:

class SerializerAPI(object):
    def get_serializer_class(self, *args, **kwargs):
        parent = super(SerializerAPI, self).get_serializer_class(*args, **kwargs)
        if (hasattr(self.request, 'accepted_renderer') and 
          self.request.accepted_renderer.format == 'api'):
            return self.serializer_class_api
        else:
            return parent