Страница сброса пароля не найдена - PullRequest
0 голосов
/ 27 февраля 2020

Я создал пользовательский сброс пароля в Django, однако после помещения информации в 'PasswordResetForm' я получаю ошибку 404 страницы не найдена.

Это мой код для reset_password:

def reset_password(request,username):
    if request.method == 'POST':
        form = PasswordResetForm(data=request.POST, user=request.user)

        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)
            #added this to redirect user to custom url
            username = request.user.username
            return redirect(reverse('main:home', kwargs={'username': username})) 
            #return redirect(reverse('main:home'))
        else:
            return redirect(reverse('main:reset_password'))
    else:
        form = PasswordResetForm(user=request.user)
        args = {'form': form}
        return render(request, 'reset_password.html', args)

Мои URL-адреса в myapp / urls.py

urlpatterns=[
    path('signup/',views.signup,name='signup'),
    path('login',views.user_login,name='user_login'),
    path('',views.main_page,name='main_page'),
    path('<str:username>', views.home, name='home'),
    #replace home/edit with below
    path('<str:username>/edit', views.edit_profile, name='edit_profile'),
    path('<str:username>/password-reset', views.reset_password, name='reset_password'),
]

и моя форма для сброса пароля:

class PasswordResetForm(PasswordChangeForm):

    class Meta:
        model = Profile
        fields = ('old_password','new_password1','new_password2')

В чем здесь проблема? Я не знаю, почему я получаю эту ошибку:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/main/test3-b/login.html?next=/main/test3-b/password-reset

Это моя модель AbstractUser в models.py (у меня нет другого кода в моем models.py

class Profile(AbstractUser):
    bio = models.TextField() 
    university = models.CharField(max_length=30)

    def __str__(self):
        return self.username

1 Ответ

0 голосов
/ 28 февраля 2020

Ваш urls.py не использует тот же путь, что и URL, к которому вы обращаетесь. Пример URL-адреса, который вы указали: http://127.0.0.1: 8000 / main / test3-b / login. html, но ваш URL для сброса пароля похож на http://127.0.0.1: 8000 / example-user / password-reset , где example-user - это имя пользователя, которому вы пытаетесь сопоставить свой путь.

Из интереса есть ли у вас структура URL, включающая имя пользователя? Обычно это нежелательно, поскольку вы используете request.user для доступа к текущему пользователю. У вас также есть риск того, что имя пользователя пользователя может нарушить ваши шаблоны, поскольку вы используете str, а не slug, что безопаснее в шаблонах URL, так как в противном случае, если пользователь был создан с именем пользователя «example / edit», тогда он никогда не сможет получить на вашу домашнюю страницу, так как она будет соответствовать записи edit_profile.

...