NoReverseMatch at /api/users/request-reset-email/



这不是重复的问题,我已经提到了旧问题,但没有找到答案。我使用Django==1.10.5

我正在尝试使用Django rest框架实现rest密码功能。但是我得到了以下错误。。

Reverse for 'api/password_reset_confirm2' with arguments '('uidb64', 'token')' 
and keyword arguments '{}' not found. 0 pattern(s) tried: []

如果你看看搜索到的模式错误显示,它无法读取url.py中配置的任何url模式。这就是问题所在。

重置密码类别:

class RequestPasswordResetEmailAPIView(GenericAPIView):
serializer_class = ResetPasswordEmailSerializer
def post(self,request):
serializer = self.serializer_class(data=request.data)
email = request.data.get('email','')
if User.objects.filter(email=email).exists():
user = User.objects.get(email=email)
uidb64 = urlsafe_base64_encode(smart_bytes(user.id))
token = PasswordResetTokenGenerator().make_token(user)
current_site = get_current_site(
request=request
).domain
relativeLink = reverse('api/password_reset_confirm2'
,args={'uidb64':uidb64, 'token': token}
)
absurl = 'http://'+current_site+relativeLink
email_body = 'Hello'+absurl
data = {'email_body': email_body, 'to_email': user.email, 'email_subject': 'Reset password link' }
Util.send_email(data)
return Response('Success')

我的url.py认证应用程序看起来像这个

urlpatterns = [
url(r'^user/?$', UserRetrieveUpdateAPIView.as_view()),
url(r'^users/?$', RegistrationAPIView.as_view()),
url(r'^users/login/?$', LoginAPIView.as_view()),
url(r'^users/request-reset-email/',RequestPasswordResetEmailAPIView.as_view(), name='users/request-reset-email'),
url(r'^users/password-reset-confirm/(?P<uidb64>[-w]+)/(?P<token>[-w]+)/$', PasswordResetTokenCheckAPIView.as_view(), name='password_reset_confirm2'),
# path('password-reset/<uidb64>/<token>/', RequestPasswordResetEmailAPIView.as_view(), name='api/password_reset_confirm2'),

]

在Main url.py中,url的连接方式类似于

url(r'^api/', include('apps.authentication.urls', namespace='authentication')),

请注意,谢谢

尝试使用

relativeLink = reverse(
'authentication:api/password_reset_confirm2',
args={'uidb64':uidb64, 'token': token}
)

reverse函数中的URL引用可能与其他应用程序中的urls冲突。代替:

relativeLink = reverse('api/password_reset_confirm2'
,args={'uidb64':uidb64, 'token': token}
)

试试这个:

relativeLink = reverse('password_reset_confirm2'
,args={'uidb64':uidb64, 'token': token}
)

现在您正在通过URL的名称引用它。

最新更新