user5687432
user5687432

Reputation:

Django - didn't return an HTTPResponse Object

Sorry if my english is bad, but if you need question, i'm here :)

I saw many answers about this subject of HttpResponse object in Django, but i can't resolve it.

Normally the user insert his email address in order to recieve an email for his new password.

def forgottenPwdEmail(request):
    if request.method == 'POST':
        form = PasswordResetRequestForm(request.POST)
        user = User.objects.get(username=request.user.username)
        user.confirmed = True
        user.save()
        sendResetPasswordMail(user, request.META['HTTP_HOST'])
    else:
        form = PasswordResetRequestForm()
        return render(request, 'front/reset_password_form.html', {'form': form})

After these error is displayed : "View" didn't return an HttpResponse object. It returned None instead. I can recieve the mail anyway, so the problem is in this function but i can't resolve it.

If you have some ideas, i am open :)

Upvotes: 0

Views: 532

Answers (2)

Jostcrow
Jostcrow

Reputation: 369

You are missing a return in your if statement.

def forgottenPwdEmail(request):
    if request.method == 'POST':
        form = PasswordResetRequestForm(request.POST)
        user = User.objects.get(username=request.user.username)
        user.confirmed = True
        user.save()
        return sendResetPasswordMail(user, request.META['HTTP_HOST'])
    else:
        form = PasswordResetRequestForm()
        return render(request, 'front/reset_password_form.html', {'form': form})

I am assuming that the sendResetPasswordMail is also returning a HttpResponse

Hope this helps

Upvotes: 2

v1k45
v1k45

Reputation: 8250

It is happening because your view doesn't return a response for a POST request. You should add something like redirect page when the email is successfully sent, something like this:

def forgottenPwdEmail(request):
    if request.method == 'POST':
        form = PasswordResetRequestForm(request.POST)
        user = User.objects.get(username=request.user.username)
        user.confirmed = True
        user.save()
        sendResetPasswordMail(user, request.META['HTTP_HOST'])

        return redirect('/password-reset-email-sent/')
     ......

Upvotes: 1

Related Questions