【问题标题】:How to return html or json from ViewSets depending on client django rest framework如何根据客户端 django rest 框架从 ViewSets 返回 html 或 json
【发布时间】:2018-03-07 15:12:47
【问题描述】:

我为移动开发人员创建了一个 API 端点,其中包含所有逻辑。现在我需要创建这个应用程序的网络版本。是否可以不专门为此编写视图,而是使用 API 中已经存在的视图? 在 API 中,我使用 Django Rest Framework ViewSets。 假设这是我的models.py

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=20)
    description = models.CharField(max_length=100, blank=True, null=True)

那么这将是我的 serializers.py:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('id', 'title', 'description')
        read_only_fields = ('id',)

viewsets.py:

from rest_framework import viewsets
from .serializers import PostSerializer
from .models import Post

class PostViewSet(viewsets.ModelViewSet):
    model = Post
    queryset = Post.objects.all()
    serializer_class = PostSerializer

urls.py

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'posts', viewsets.Post, base_name='post')
urlpatterns = router.urls

我在文档中看到过这个HTML & Forms,但是如果我将 renderer_classes 和 template_name 放入它只会使用我想要的参数呈现 html,但我希望有一个单独的端点来为移动开发人员返回 json 并呈现网页版的用户友好的 html。是否可以这样做,如果可以,我该如何处理?

【问题讨论】:

    标签: python django api django-rest-framework


    【解决方案1】:

    我认为您将不得不手动创建一个单独的端点来处理 HTML 请求,但您可以使用 Template Renderers 轻松实现此目的

    【讨论】:

    • 这样做有什么意义?我的项目比展示的要大得多,我认为这是一个非常糟糕的主意,只是复制和粘贴数千行代码添加到它们 renderer_classes
    • 根据您的问题,您需要单独的移动和桌面端点。 Django 遵循 MVC 架构,其中视图只是对 URL 的可调用。如果您使用的是普通视图,您可以检查请求是否为 AJAX,但我不确定是否可以使用 django rest 框架来实现。
    猜你喜欢
    • 2012-03-04
    • 2013-10-10
    • 1970-01-01
    • 2017-08-21
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多