При реализации моего API, я хотел бы, чтобы его можно было просматривать в формате XML.Не только JSON - PullRequest
1 голос
/ 14 июня 2019

Я создаю веб-API для приложения для опросов, которое Django дает нам в качестве практики для себя. Я был в состоянии пойти довольно далеко, но я застрял с желанием дать возможность для форматирования с XML.

Я пытался использовать DEFAULT_PARSER и DEFAULT_RENDER, и это не получилось так, как я хотел. Я просто хочу, чтобы там была опция для JSON.

Это мой класс API / Views

from rest_framework import generics
from . serializers import QuestionSerializer, ChoiceSerializer
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter, SearchFilter

from polls.models import Choice, Question

class QuestionList(generics.ListAPIView):
    serializer_class = QuestionSerializer
    queryset = Question.objects.all()
    filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
    filter_fields = {'id': ['gte', 'lte', 'exact'], 'pub_date': ['gte', 'lte']}
    ordering_fields = ('id', 'question_text', 'pub_date')
    search_fields = ('pub_date', 'question_text')


class ChoiceList(generics.ListAPIView):
    serializer_class = ChoiceSerializer
    queryset = Choice.objects.all()
    filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
    # trying to do greater than or less than filter fields stuff
    filter_fields = {'id': ['gte', 'lte', 'exact'], 'votes': ['gte', 'lte', 'exact']}
    ordering_fields = ('id', 'votes', 'choice_text', 'question',)
    search_fields = ('choice_text', 'question')

это класс API / сериализаторов

from rest_framework import routers, serializers, viewsets
from polls.models import Question, Choice


#  serializer is the way you can see the list of info for the models you have selected

class QuestionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Question
        fields = '__all__'

# i have no idea how to make hyperlinks to open up another page
class ChoiceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Choice
        fields = ('id', 'votes', 'choice_text', 'question')

Хотите иметь раскрывающееся меню с надписью "XML"

1 Ответ

2 голосов
/ 14 июня 2019

Добавьте синтаксический анализатор / рендеринг XML к стандартным:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
        'rest_framework_xml.renderers.XMLRenderer'
    ),
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework_xml.parsers.XMLParser'
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...