0
votes

Lecture d'une chaîne de l'URL dans une classe dans la vue (APIView)

J'ai une URL comme ci-dessous dans mon modèle

class VerifyEmailView(APIView):
    permission_classes = (AllowAny,)
    allowed_methods = ('POST','GET', 'OPTIONS', 'HEAD')
....
    def get(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        '''key is used here'''
        self.kwargs['key'] = serializer.validated_data['key']
        confirmation = self.get_object()
        confirmation.confirm(self.request)
....


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser

path = request.path
path_vals = path.split('/')
key = path_vals[-2]


0 commentaires

2
votes

comme vous utilisez des paramètres d'url, vous pouvez l'obtenir directement en tant que paramètre de fonction dans votre get () voir l'exemple ci-dessous:

class VerifyEmailView(APIView):
    permission_classes = (AllowAny,)
    allowed_methods = ('POST','GET', 'OPTIONS', 'HEAD')
....
    def get(self, request, key):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        '''key is used here'''
        self.key = key
        confirmation = self.get_object()
        confirmation.confirm(self.request)
....

Ici, vous obtenez directement "MjU : 1ggiiI: 923vm1cLboPQk9TX1f0aywDWBs8 "dans la variable key .

Pour plus d'informations, consultez cette page


0 commentaires

0
votes

tant que la solution #nishant et #Amit fonctionne, cela devrait également fonctionner

path('rest-auth/registration/account-confirm-email/', VerifyEmailView.as_view(), name='account_confirm_email'),

mais dans ce cas, Allauth se plaint en fait de l'URL du formulaire:

path('rest-auth/registration/account-confirm-email/<str:key>', VerifyEmailView.as_view(), name='account_confirm_email'),


0 commentaires