如何在 Django Rest Framework 中获取 xml 格式

Gou*_*un2 3 python xml django rest django-rest-framework

我正在尝试在 Django Rest FrameworkWork 中获取 xml 格式,我尝试了 Django Rest Framework 提供的教程,我是 django 的新手,我做了以下操作。

设置.py

 INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'rest_framework',
        'books',
        'users',
    ]
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls import url
from django.contrib import admin
from books.views import *
from users.views import *
from rest_framework.urlpatterns import format_suffix_patterns

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^books/all/$', all_books),
        url(r'^user/', get_user)
    ]

    urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html','xml'])
Run Code Online (Sandbox Code Playgroud)

视图.py

from rest_framework.response import Response
from rest_framework.decorators import api_view
from books.serializers import *
from books.models import *

# Create your views here.

@api_view(['GET'])
def all_books(request):
    books = Book.objects.all()
    serializers = BookSerializer(books,many=True)
    return Response(serializers.data)
Run Code Online (Sandbox Code Playgroud)

当我尝试访问 xml 数据时,我通过执行 ?format=xml 收到此错误

{"detail":"Not found."}
Run Code Online (Sandbox Code Playgroud)

教程链接http://www.django-rest-framework.org/api-guide/format-suffixes/

Dhi*_*aTN 5

实际上你settings.py缺少 xml 解析器配置。

  1. 安装rest_framework_xmlpip install djangorestframework-xml
  2. 更新settings.py中的INSTALLED_APPS
INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'rest_framework',
  'rest_framework_xml',
  'books',
  'users',
]
Run Code Online (Sandbox Code Playgroud)
  1. 在settings.py中添加xml解析器:
REST_FRAMEWORK = {
  'DEFAULT_PARSER_CLASSES': (
    'rest_framework_xml.parsers.XMLParser',
  ),
    'DEFAULT_RENDERER_CLASSES': (
    'rest_framework_xml.renderers.XMLRenderer',
  ),
}
Run Code Online (Sandbox Code Playgroud)