django.urls.exceptions.NoReverseMatch: обратный для ’email-verify’ не найден. ’email-verify’ не является допустимой функцией просмотра или именем шаблона

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Не уверен, почему эта ошибка происходит со мной, я пытаюсь отправить электронное письмо с подтверждением новому зарегистрированному пользователю.

Вот моя ошибка: django.urls.exceptions.NoReverseMatch: Reverse for 'email-verify' not found. 'email-verify' is not a valid view function or pattern name. я четко указываю имя URL-адреса и связываю все с моим пониманием.

Вот мой код:

users/urls.py

 from django.urls import path
from .views import CustomUserCreate, VerifyEmail, BlacklistTokenUpdateView

app_name = 'users'

urlpatterns = [
    path('register/', CustomUserCreate.as_view(), name="register"),
    path('email-verify/', VerifyEmail.as_view(), name="email-verify"),
    path('logout/blacklist/', BlacklistTokenUpdateView.as_view(), name='blacklist'),
]
 

users/view.py

 from django.urls import reverse
from django.contrib.sites.shortcuts import get_current_site

from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework import generics ,status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.permissions import AllowAny


from .models import NewUser
from .serializers import RegisterSerializer
from .utils import ConfirmEmail


class CustomUserCreate(generics.GenericAPIView):

    permission_classes = [AllowAny]
    serializer_class = RegisterSerializer

    def post(self, request, format='json'):
        user = request.data
        serializer = self.serializer_class(data=user)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        user_data = serializer.data
        user = NewUser.objects.get(email=user_data['email'])
        token = RefreshToken.for_user(user).access_token
        current_site = get_current_site(request).domain
        relativeLink = reverse('email-verify') #Error starts here
        absurl = 'http://' current_site relativeLink "?token=" str(token)
        email_body = 'Hi ' user.username   
            ' Use the link below to verify your email n'   absurl
        data = {'email_body': email_body, 'to_email': user.email,
                'email_subject': 'Verify Your Email'}

        ConfirmEmail.send_email(data)
        return Response(user_data, status=status.HTTP_201_CREATED)


class VerifyEmail(generics.GenericAPIView):
    def get(self):
        pass
 

проект urls.py

 from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)


urlpatterns = [
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('admin/', admin.site.urls),
    path('api/', include('bucket_api.urls', namespace='bucket_api')),
    path('auth/', include('users.urls')),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('', include('bucket.urls', namespace='bucket')),

]
 

Хотел бы знать, как устранить эту ошибку, но, похоже, не могу понять, почему это происходит, и я наткнулся на препятствие. Спасибо за помощь.

Ответ №1:

Вам нужно использовать пространство имен для обратного URL как,

 relativeLink = reverse('users:email-verify') 

Комментарии:

1. Это мелочь, но мы обычно забываем добавлять.