Как отключить вкладку «HTML» в DRF Browsable API, но оставить вкладку «Raw» доступной - PullRequest
0 голосов
/ 07 мая 2020

При использовании более сложных схем представления (например, вложенных объектов и списков) «HTML», являющаяся частью Browsable API в Django REST Framework, становится практически непригодным для использования. Как я могу отключить его, сохранив при этом остальную часть доступного для просмотра API, включая возможность POST / PUT / PATCH данных с помощью другой вкладки «Raw»?

1 Ответ

0 голосов
/ 07 мая 2020

Не видел этого в документации, но в исходном коде:

    def get_rendered_html_form(self, data, view, method, request):
        """
        Return a string representing a rendered HTML form, possibly bound to
        either the input or output data.

        In the absence of the View having an associated form then return None.
        """

https://github.com/encode/django-rest-framework/blob/3.9.x/rest_framework/renderers.py#L457 -L463

Это работает не так, как рекламируется , хотя. Возврат здесь None предотвратит отображение вкладки «HTML», но также удалит кнопки «УДАЛИТЬ» и «ОПЦИИ» из верхней части страницы. Чтобы получить только эффект удаления вкладки «HTML», перезапись render_form_for_serializer, кажется, дает трюк:

class OnlyRawBrowsableAPIRenderer(BrowsableAPIRenderer):
    def render_form_for_serializer(self, serializer):
        return ""

Использовать его на определенных c Просмотр:

class MyModelViewSet(ModelViewSet):
    renderer_classes = [OnlyRawBrowsableAPIRenderer, JSONRenderer]
    ...

или используя DEFAULT_RENDERER_CLASSES настройку .

...