首页 > 解决方案 > 设置一些使用 Django Rest Framework API 的视图

问题描述

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

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

我跟着这个,但它似乎改变了 API 视图(在这种情况下,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})

我的模型.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 可序列化的”

抱歉,最初的问题有些不同...

标签: djangodjango-rest-framework

解决方案


是的,你可以两者兼得。您提供给文档的链接具有以下内容:

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

发出 API 请求时,将ACCEPTrequest-header 相应地设置为htmljson


推荐阅读