2016-10-29 2 views
0

J'utilise Django Rest Framework et python-requests et je passe plusieurs variables via l'URL comme indiqué ci-dessous.Où puis-je accéder aux paramètres de demande dans Django Rest Framework?

"GET/api/boxobjects /? Format = json & make = Prusa & modèle = i3 & plastique = PLA HTTP/1.1"

donc je passe les variables marque, le modèle et le plastique. La méthode recommandée pour accéder à ces paramètres est indiquée ci-dessous.

makedata = request.GET.get('make', '') 

Cependant, je ne sais pas où placer cette ligne de code. J'ai terminé le tutoriel pour Django Rest Framework et j'ai configuré mes vues pour qu'elles correspondent à peu près au tutoriel.

views.py

@api_view(['GET']) 
@login_required 
def api_root(request, format=None): 
    return Response({ 
     'Users': reverse('api:user-list', request=request, format=format), 
     'Objects': reverse('api:object-list', request=request, format=format), 
     'Files': reverse('api:file-list', request=request, format=format), 
     'Config Files': reverse('api:config-list', request=request, format=format), 
     'Box-objects': reverse('api:box-object-list', request=request, format=format), 

    }) 

class BoxViewSet(viewsets.ModelViewSet): 

    queryset = Uploadobject.objects.all().exclude(verified=False) 
    serializer_class = BoxSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, 
          IsBox) 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 

    #Maybe get function here? Not displaying 
    ''' 
    def get(self, request): 
     print ("request set here?") 
    ''' 

Où puis-je placer une ligne de code pour accéder à ces paramètres de demande?

Répondre

3
class BoxViewSet(viewsets.ModelViewSet): 
    queryset = Uploadobject.objects.all().exclude(verified=False) 
    serializer_class = BoxSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, 
          IsBox) 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 


    def get_queryset(self): 
     req = self.request 
     print(req) 
     make = req.query_params.get('make') 
     if make: 
      self.queryset = uploadobject.objects.filter(make=make) 
      return self.queryset 
     else: 
      return self.queryset 

Qu'est-ce que la déclaration fait?

Si 'make' est dans les paramètres de requête de la demande alors remplacer la propriété BoxViewSet queryset avec un nouveau queryset basé sur 'make' et le retourner. sinon, renvoie le jeu de requêtes par défaut qui exclut les objets qui n'ont pas été vérifiés.

+0

Cela fonctionne parfaitement! Si bien en fait, cela fonctionne sans l'instruction if/else. Pour les points bonus, que fait cette déclaration? – RknRobin