web-dev-qa-db-fra.com

Django - il manque 1 argument positionnel requis: 'request'

Je reçois l'erreur 

get_indiceComercioVarejista () manque 1 argument positionnel requis: 'request'

en essayant d'accéder à la méthode get_indiceComercioVarejista. Je ne sais pas ce qui ne va pas avec ça.

vues:

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)

urls:

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

Quelqu'un peut-il m'aider, s'il vous plaît?

3
Giorge Caique

request est passé comme premier argument. Votre premier argument est self.

C'est pourquoi il serait judicieux d'extraire get_indiceComercioVarejista de la classe ChartData:

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

Je pense que la meilleure approche serait de déplacer get_indiceComercioVarejista hors de APIView, parce que APIView se contente d'envoyer aux méthodes http habituelles: get post put patch delete.

par exemple:

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)

Une autre solution consisterait à utiliser ViewSet , qui sont recommandés lorsque vous travaillez avec DRF.

0
Willemoes