设置一些使用Django Rest Framework API的视图

时间:2019-04-24 18:55:57

标签: django django-rest-framework

我有一个非常基本的Django Rest API。

我不知道在同一个使用API​​的django项目中如何拥有一些HTML视图(最终使API仅返回JSON)。

我遵循了这个步骤,但是似乎改变了API View(在这种情况下,curl将检索HTML而不是JSON): https://www.django-rest-framework.org/api-guide/renderers/#templatehtmlrenderer

我需要另一个Django应用程序吗?另一个Django项目?一些JS?

编辑:

好吧,感谢rrebase,我已经看到了可能。

但是我无法使用Curl检索JSON,这是我的views.py

from rest_framework import generics
from rest_framework.renderers import TemplateHTMLRenderer, JSONRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAdminUser

from . import models
from . import serializers

class UserListView(generics.ListAPIView):
    renderer_classes = [JSONRenderer, TemplateHTMLRenderer]
    template_name = 'profile_list.html'

    def get(self, request):
        queryset = models.CustomUser.objects.all()
        serializer_class = serializers.UserSerializer
        return Response({'profiles': queryset})

我的models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):

    def __str__(self):
        return self.email

当我请求API(http://127.0.0.1:8000/api/v1/users/)时收到错误消息“ CustomUser类型的对象不可JSON序列化”

对不起,最初的问题有所不同...

2 个答案:

答案 0 :(得分:0)

是的,您可以同时拥有。您提供给文档的链接具有以下内容:

  

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

发出API请求时,将ACCEPT请求标头设置为htmljson

答案 1 :(得分:0)

最后,我认为条件已经确定,并且可以正常工作

class UserListView(generics.ListAPIView):
    renderer_classes = [JSONRenderer, TemplateHTMLRenderer]
    permission_classes = (IsAdminUser,)

    def get(self, request):
        queryset = CustomUser.objects.all()

        if request.accepted_renderer.format == 'html':
            data = {'profiles': queryset}
            return Response(data, template_name='profile_list.html')
        else:
            serializer = UserSerializer(queryset, many=True)
            data = serializer.data
            return Response(data)