#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, и теперь сброс пароля работает отлично — Спасибо за вашу помощь.