Сброс пароля Django — исключение не существует

#python #django #django-authentication

#python #django #django-аутентификация

Вопрос:

Страница password_reset моего сайта Django вызывает DoesNotExist исключение после ввода адреса электронной почты и нажатия кнопки.

Четыре URL-адреса, необходимые для функции сброса пароля, находятся в (основном проекте) urls.py как:

 (r'^password_reset/$', 'appname.views.cust_password_reset'),
(r'^password_reset/done/', 'appname.views.cust_password_reset_done'),
(r'^reset/(?P<uidb36>[0-9A-Za-z] )-(?P<token>. )/$', 'appname.views.cust_password_reset_confirm'),
(r'^reset/done/$', 'appname.views.cust_password_reset_complete')
  

Ниже приведен код, используемый для связанных представлений:

 def cust_password_reset(request):
    return password_reset(request, post_reset_redirect='password_reset/done',template_name='registration/password_reset_done.html')

def cust_password_reset_done(request):
    return password_reset_done(request,  template_name='registration/password_reset_done.html')

def cust_password_reset_confirm(request, uidb36=None, token=None):
    return password_reset_confirm(request, uidb36=uidb36, token=token,
    template_name='registration/password_reset_confirm.html',
    post_reset_redirect='registration/reset/done/')

def cust_password_reset_complete(request):
    return password_reset_complete(request,
    template_name='registration/password_reset_complete.html')
  

Адрес электронной почты правильно проверен на действительность, но перенаправление на password_reset / done, похоже, не выполняется. URL-адрес остается как password_reset, но вызывает исключение DoesNotExist со значением «Запрос, соответствующий сайту, не существует».

URL-адреса и шаблоны, похоже, работают должным образом, и password_reset / done отображается корректно при обращении вручную.
Шаблоны, на которые ссылаются, являются точными копиями оригинальных шаблонов Django, с добавлением только верхнего / нижнего колонтитула. Сброс пароля без использования пользовательских представлений / шаблонов приводит к той же ошибке.

Любые идеи относительно того, что может быть причиной этого, были бы высоко оценены.

Ответ №1:

Эта ошибка «Запрос на соответствие сайту не существует» означает, что SITE_ID в settings.py не совпадает с реальным Site объектом в базе данных. Проверьте id атрибут для вашего сайта и убедитесь, что он совпадает с SITE_ID .

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

1. SITE_ID В settings.py равно 1, и я не собираюсь (по крайней мере, намеренно) менять это где-либо еще. В разделе настроек информации о запросе, отображаемой при возникновении ошибки, SITE_ID также равно 1, но, похоже, это происходит непосредственно из settings.py . Возможно ли, что что-то в представлениях password_reset может автоматически изменять идентификатор?

2. Эта ошибка довольно явная; есть только одна вещь, которая может вызвать это. Проверьте свою базу данных и убедитесь, что site_id там равен 1.

3. Похоже, что в базе данных вообще не было Site объекта — когда я добавил его, ему был присвоен id 1, и теперь сброс пароля работает отлично — Спасибо за вашу помощь.