user786
user786

Reputation: 391

HTTP Request Object does not respond

I am making a login form in Django. When I am click on login submit button , It gives an error of

ValueError at /registration/ The view registration.views.login didn't return an HttpResponse object.

The view file is

from django.template import  loader
from django.shortcuts import render
from registration.models import Registration
from django.http import HttpResponse
def login(request):
  if request.method == 'POST':
    user = authenticate(username=request.POST['username'], password=request.POST['password'])
    if user is not None:
      if user.is_active:
        login(request, user)
        # success
        return HttpResponseRedirect('sucess')
      else:
        # disabled account
        return direct_to_template(request, 'inactive_account.html')
    else:
      # invalid login
      return direct_to_template(request, 'invalid_login.html')

def logout(request):
  logout(request)
  return direct_to_template(request, 'logged_out.html')

and login.html file is

<h3>Login</h3>
<form action="/login/" method="post" accept-charset="utf-8">
<label for="username">Username:--</label><input type="text" name="username" value="" id="username" /><br>
<label for="password">Password:-- </label><input type="password" name="password" value="" id="password" />
<p><input type="submit" value="Login →"></p>
</form>

Upvotes: 0

Views: 199

Answers (3)

Serhii Holinei
Serhii Holinei

Reputation: 5864

Your login view will return a HttpResponse for a POST request only (on form submit). When you address your browser to login page, it makes a GET request, which is not handled in your view

I`ll recomend you to read more about user athentication: doc.

And as mentioned, use render or render_to_response functions from django.shortcuts

Upvotes: 1

user1614526
user1614526

Reputation: 474

Why not you are using render_to_response ?

The answer of your question is you are not returning the Httpresponse object

If your login is successful then only you will be redirect to success .

Try this

 return render_to_response(your_template_name, 
                              context_instance=RequestContext(request))

Don't forget to import context_instance like

from django.template import RequestContext

Upvotes: 0

Rohan
Rohan

Reputation: 53336

Instead of direct_to_template you may want to use render_to_response which renders a given template and returns HttpResponse.

Refer render_to_response. Note; you will have to import it using from django.shortcuts import render_to_response

Upvotes: 0

Related Questions