Ошибка "Страница не найдена" при попытке сбросить пароль в Django3

Здесь я использую Python 3.7 и Django 3.0 Где когда пользователь нажимает на кнопку забыл пароль, пользователю отправляется письмо со ссылкой для сброса пароля, когда пользователь нажимает на эту ссылку, я получаю ошибку page not found

Вот мой views.py

.....
......
associated_users= ClientUser.objects.filter(email= data)
               

                if associated_users.exists():
                    for user in associated_users:
                           
                            c = {
                                'email': user.email,
                                'domain': request.META['HTTP_HOST'],
                                'site_name': 'your site',
                                'uid': urlsafe_b64encode(force_bytes(user.pk)),
                               
                                'user': user.name,

                                'token': default_token_generator.make_token(user),
                                'protocol': 'http',
                                }
                            self.request.session['e_data'] = {
                                'email': user.email,
                                }
                            subject_template_name='core/reset_subject.txt'
                            # copied from django/contrib/admin/templates/registration/password_reset_subject.txt to templates directory
                            email_template_name='core/reset_email.html'
                            # copied from django/contrib/admin/templates/registration/password_reset_email.html to templates directory
                            subject = loader.render_to_string(subject_template_name, c)
                            # Email subject *must not* contain newlines
                            subject = ''.join(subject.splitlines())
                            email = loader.render_to_string(email_template_name, c)
                            send_mail(subject, email, settings.DEFAULT_FROM_EMAIL , [user.email], fail_silently=False)
                    result = self.form_valid(form)
                    messages.success(request, 'An email has been sent to ' + data +". Please check its inbox to continue reseting password.")
                    return result
                result = self.form_invalid(form)
                messages.error(request, 'No user is associated with this email address')
                return result

вот мой reset_email.html

{% load i18n %}{% autoescape off %}

{% trans "There has been a request to reset your password for Degree. To reset your password use this link:" %}
    {% block reset_link %}


    "{%if secure %}https{% else %}http{% endif %}://{{domain}}/reset_password_confirm/{{uidb64}}{{uid}}-{{token}}"

   
    {% endblock %}
{% trans "If you did not make a request to reset your password please notify us by sending an email to support@degree.com" %}

{% trans "Best regards," %}

{% trans "Degree Support" %}


{% endautoescape %}

Вот мой urls.py для reset_password_confirm

re_path(r'^reset_password_confirm/(?P<uidb64>[0-9A-Za-z=]+)/(?P<token>.+)/$', PasswordResetConfirmView.as_view(),name='reset_password_confirm'),

вот мое изображение ошибки

изображение ошибки

В соответствии с вашим определением пути

{%if secure %}https{% else %}http{% endif %}://{{domain}}/reset_password_confirm/{{uidb64}}{{uid}}-{{token}}"

должен быть

{%if secure %}https{% else %}http{% endif %}://{{domain}}/reset_password_confirm/{{uidb64}}{{uid}}/{{token}}"

Заметка {{uid}}-{{token}} изменена на {{uid}}/{{token}}.

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

uidb64 = uidb64.encode('utf-8')
Вернуться на верх