我有一个非常基本的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序列化”
对不起,最初的问题有所不同...
答案 0 :(得分:0)
是的,您可以同时拥有。您提供给文档的链接具有以下内容:
您可以使用TemplateHTMLRenderer通过REST框架返回常规HTML页面,或者从单个端点返回HTML和API响应。
发出API请求时,将ACCEPT
请求标头设置为html
或json
。
答案 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)