1
votes

Comment obtenir le paramètre Api Body dans Django

Je veux obtenir le paramètre de corps de l'API dans ma vue. Je souhaite appliquer un filtre de recherche. J'utilise self.request.GET.get ('query') mais cela donne toujours none . Comment puis-je obtenir le paramètre du corps comme du facteur? J'envoie requête: Active dans le corps. Mais je ne comprends pas

class JobsListAPIView(generics.ListAPIView):
    serializer_class = JobListSerialzer
    # pagination_class = ListLimitOffsetPagination
    permission_classes = [UserIsAuthenticated]

    def get_queryset(self, *args, **kwargs):
        # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id)

        qs = Jobs.objects.exclude(job_is_deleted = True).filter(
            job_company = self.request.auth.application.company
        )

        query = self.request.GET.get('query')
        print('query: ', request.data)

        if query:
            qs = qs.filter(job_status=query)

        return qs


1 commentaires

Quelle est votre URL? Cela devrait être quelque chose comme example.com/jobs?query ** = ** Active. Dans votre exemple, vous dites query **: ** Active.


3 Réponses :


2
votes

Pour obtenir les paramètres du corps, je suppose que vous utilisez la méthode POST pour demander l'API. Obtenir les données POST est aussi simple que self.request.POST.get('query')


0 commentaires

1
votes

Dans Django pur, le moyen d'obtenir le contenu du body serait d'utiliser request.POST , et d'obtenir les paramètres de requête serait d'utiliser le request.GET . Puisqu'il semble que vous utilisez la vue du cadre de repos Django, il est recommandé d'utiliser à la place ses request.data et request.query_params .

En supposant que le facteur envoie les données correctement formaté, dans ce cas vous pouvez alors utiliser:

query = self.request.data.get("query")


0 commentaires

1
votes

Votre problème réel ne semble pas prendre un paramètre de requête (données de corps). mais vous ne le passez pas correctement. Vous devez passer / your-url /? Query = Active (remplacé: with =). lorsque vous passez la requête: Active, il prend toute la "requête: Active" comme une seule clé dans le corps.


0 commentaires