HTTP Request Object does not respond

丶灬走出姿态 提交于 2019-12-12 03:36:49

问题


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>

回答1:


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




回答2:


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




回答3:


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


来源:https://stackoverflow.com/questions/12157932/http-request-object-does-not-respond

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!