DRF-不允许使用“GET”方法

2024-09-24 22:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Django Rest框架中设置一个基于类的视图。

这是我的url.py-

from django.conf.urls import patterns, include, url
from rest_framework.urlpatterns import format_suffix_patterns
from django.contrib import admin
from TidalDEV import views

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^test/(?P<pk>[0-9]+)/$', views.TESTXMLDetail.as_view()),    
)

这是我的观点-

import os, tempfile, zipfile
from django.shortcuts import render
from django.core import serializers
from django.core.serializers import serialize
from django.core.servers.basehttp import FileWrapper
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer, XMLRenderer
from rest_framework.parsers import JSONParser
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated, AllowAny
from itertools import chain
from TAPI.renderers import *
from TAPI.models import *
from TAPI.serializers import JobdtlSerializer, JobmstSerializer, TrgjobSerializer, JobdepSerializer

class TESTXMLDetail(APIView):
    permission_classes = (AllowAny,)
    """
    Retrieve, update or delete a snippet instance.
    """
    def get_object(self, pk):
        try:
            mst = Jobmst.objects.db_manager('AdmiralDEV').raw("""
                query1""", [pk])

            dtl = Jobdtl.objects.db_manager('AdmiralDEV').raw("""
                query2""", [pk])        
            dep = Jobdep.objects.db_manager('AdmiralDEV').raw("""
                query3""", [pk])
            trg = Trgjob.objects.db_manager('AdmiralDEV').raw("""
                query4""", [pk])
        except Jobmst.DoesNotExist:
            return HttpResponse(status=404)

        def get(self, request, pk, format=None):
            jobmststring = JobmstSerializer(mst)
            jobdtlstring = JobdtlSerializer(dtl)
            jobdepstring = JobdepSerializer(dep, many=True)
            trgjobstring = TrgjobSerializer(trg, many=True)

            jobmst_serialized = {'jobmst': jobmststring.data}
            jobdtl_serialized = {'jobdtl': jobdtlstring.data}
            jobdep_serialized = [{'jobdep':item} for item in jobdepstring.data]
            trgjob_serialized = [{'trgjob':item} for item in trgjobstring.data]

            jobgroup = jobmst_serialized, jobdtl_serialized, jobdep_serialized, trgjob_serialized

            jobgroupresponse = TESXMLResponse(jobgroup)
            return jobgroupresponse

当我运行URL时,我得到的只是XML格式,但是它说-

<detail>Method 'GET' not allowed.</detail>

我已经尝试在视图中设置权限类,如上所述,我还将以下行放在我的设置中。py给出了什么?

  'DEFAULT_PERMISSION_CLASSES': (
   'rest_framework.permissions.AllowAny',
  ),

Tags: djangofromimportrestdbdatarawobjects
1条回答
网友
1楼 · 发布于 2024-09-24 22:30:01

您收到此错误是因为DRF apieview没有get方法(或者实际上没有任何HTTP请求类型的方法)。若要使代码正常工作,您可以将get_object方法重命名为get(确保添加了预期的参数请求和格式),或者可以编写get方法来返回响应:

class TESTXMLDetail(APIView):
    def get(self, request, pk, format=None):
        return self.get_object(pk)

    def get_object(self, pk):
        ...
        ...

相关问题 更多 >