Django的 - 失踪1个人需要位置参数:“请求”

问题描述:

试图访问该方法get_indiceComercioVarejista时,我得到的错误Django的 - 失踪1个人需要位置参数:“请求”

get_indiceComercioVarejista() missing 1 required positional argument: 'request'

。我不知道它有什么问题。

观点:

from django.http import JsonResponse 
from django.shortcuts import render, HttpResponse 
import requests 
import pandas as pd 

from rest_framework.views import APIView 
from rest_framework.response import Response 

class ChartData(APIView): 

    authentication_classes = [] 
    permission_classes = [] 

    def get(self, request, format=None): 

     data = { 
      'customer' : 10, 
      'sales': 100 
     } 

     return Response(data) 

    def get_indiceComercioVarejista(self, request, format=None): 
     data = { 
      'customer' : 10, 
      'sales': 100 
     } 
     return Response(data) 

网址:

from django.conf.urls import url 
from . import views 
from django.contrib.auth.views import login 

urlpatterns = [ 
    url(r'^$', views.home), 
    url(r'^login/$', login, {'template_name': 'Oraculum_Data/login.html'}), 
    url(r'^cancerColo/$', views.cancerColo), 
    url(r'^educacao/$', views.educacao), 
    url(r'^comercio/$', views.comercio), 
    url(r'^saude/$', views.saude), 
    url(r'^api/chart/data/$', views.ChartData.as_view()), 
    url(r'^api/chart/indiceVolumeReceitaComercioVarejista/$', views.ChartData.get_indiceComercioVarejista) 
] 

有人可以帮助我,好吗?

+0

你想要'.get'来做到这一点,并在你的网址中使用'views.ChartData.as_view()'...(或者如果你已经有了apiview的prepare/dispatch方法,不止一个取决于任何标准......) –

request作为第一个参数传递。你的第一个参数是self

这就是为什么它会是一个好主意,从ChartData类提取get_indiceComercioVarejista

def get_indiceComercioVarejista(request, format=None): 
    data = { 
     'customer' : 10, 
     'sales': 100 
    } 
    return Response(data) 
+0

仍然无法正常工作。 get方法传递self作为第一个参数,它工作正常。 –

+0

您是否从课堂中提取了'get_indiceComercioVarejista'方法? 'get'方法可以工作,因为你通过'as_view()'使用它, – Siegmeyer

我认为最好的办法是移动get_indiceComercioVarejista出APIView,因为APIView只是将分派到正规的HTTP方法:get post put patch delete

e.g:

view.py

def get_indiceComercioVarejista(request, format=None): 
    data = { 
     'customer' : 10, 
     'sales': 100 
    } 
    return Response(data) 

urls.py

url(r'^api/chart/indiceVolumeReceitaComercioVarejista/$', views.get_indiceComercioVarejista) 

另一种解决方案是使用ViewSet这与DRF工作时的推荐。

+0

没有工作。错误:TypeError:as_view()需要1个位置参数,但2个被给出 –

+0

更新的答案,我以为你使用ViewSets – Willemoes