Skip to main content
 首页 » 编程设计

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

2024年10月17日24dyllove98

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

settings.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', 
    ] 

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']) 

views.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) 

当我尝试访问 xml 数据时,执行 ?format=xml 时出现此错误

{"detail":"Not found."} 

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

请您参考如下方法:

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

  1. 安装rest_framework_xml : pip 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', 
] 
  1. 在settings.py中添加xml解析器:
REST_FRAMEWORK = { 
  'DEFAULT_PARSER_CLASSES': ( 
    'rest_framework_xml.parsers.XMLParser', 
  ), 
    'DEFAULT_RENDERER_CLASSES': ( 
    'rest_framework_xml.renderers.XMLRenderer', 
  ), 
}