Я хочу сбросить пароль в приложении django, посетив определенный URL-адрес и отправив электронное письмо методом POST. Это потому, что я хочу использовать его в Android-приложении, которое будет иметь свою собственную форму. Итак, я думал, что могу создать настраиваемую форму сброса пароля, а затем сохранить его, но он не работает.отправка пользовательской формы сброса пароля
from django.contrib.auth.forms import PasswordResetForm
class Custom_password_reset_form(PasswordResetForm):
def __init__(self, email, **kwargs):
super(Custom_password_reset_form, self).__init__(**kwargs)
self.email = forms.EmailField(initial=email, max_length=254)
def mobile_password_reset(request):
"""Sends mail with password reset link."""
email = request.POST.get('email')
my_form = Custom_password_reset_form(email)
if my_form.is_valid():
print 'valid'
my_form.save()
else:
print 'not valid'
print my_form._errors
return render(...)
Валидация всегда терпит неудачу, давая пустой список my_form._errors
. Что мне здесь не хватает? Или, может быть, есть лучший способ сделать это?
Правильный код:
Пользовательский класс не является необходимым, и должны быть удалены. Метод сброса пароля должен выглядеть следующим образом:
def mobile_password_reset(request):
"""Sends mail with password reset link."""
my_form = PasswordResetForm(request.POST)
if my_form.is_valid():
my_form.save()
return JsonResponse({'success': True})
else:
return JsonResponse({'success': False})
Важно отметить, что без django.contrib.sites
приложение добавлено в настройки, my_form.save()
не будет работать. Это также можно было бы исправить добавлением этого аргумента: my_form.save(request=request)
.
Я не проверял ваш ответ, но, похоже, он слишком тяжел для моей проблемы. – jligeza