Django-Rest-Framework(DRF)视图和序列化器可以取代Django本机视图和表单

San*_*idi 5 django django-rest-framework

我正在开发一个我必须展示的网站

1)具有html内容类型的网页

2)还提供api json端点来开发Web或移动应用程序.

目前,对于html网页,我使用了djangos视图和表单.

而对于api我使用Django休息框架视图和序列化器.

但经过DRF后,我发现DRF可以呈现多种格式.

HTML和Forms REST框架适用于返回API样式响应和常规HTML页面.此外,序列化程序可用作HTML表单并在模板中呈现.

http://www.django-rest-framework.org/topics/html-and-forms/

您可以使用TemplateHTMLRenderer使用REST框架返回常规HTML页面,或者从单个端点返回HTML和API响应.

http://www.django-rest-framework.org/api-guide/renderers/#templatehtmlrenderer

由于有一个视图(一个端点),我可以同时获得html和api,这不会减少我的编码工作量.

我打算只使用DRF视图和searializers而不是DJango表单和任何类型的内容的视图.

如果我只使用DRF会有什么挫折.

Joh*_*fis 7

没有Django就不能使用DRF,因为DRF不是自治框架.
因此,为了使用DRF,您将基于Django应用程序.因此,使用Django视图的选项取决于您和您想要解决的问题.

通常,仅使用DRF视图和序列化程序没有任何缺点,但正如我所提到的,这取决于手头的问题.列举了为何使用DRF的原因的一些主题可以在这里这里找到.

最后,DRF为您提供了使用"情境"渲染器和选项的选项request.accepted_renderer(例如,直接来自文档):

在某些情况下,您可能希望视图使用不同的序列化样式,具体取决于接受的媒体类型.如果需要这样做,可以访问request.accepted_renderer以确定将用于响应的协商渲染器.

例如:

@api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def list_users(request):
    """
    A view that can return JSON or HTML representations
    of the users in the system.
    """
    queryset = Users.objects.filter(active=True)

    if request.accepted_renderer.format == 'html':
        # TemplateHTMLRenderer takes a context dict,
        # and additionally requires a 'template_name'.
        # It does not require serialization.
        data = {'users': queryset}
        return Response(data, template_name='list_users.html')

    # JSONRenderer requires serialized data as normal.
    serializer = UserSerializer(instance=queryset)
    data = serializer.data
    return Response(data)    
Run Code Online (Sandbox Code Playgroud)

它涵盖了你问题的第二部分.