HTTP请求对象不响应

时间:2012-08-28 11:05:11

标签: python django django-views

我正在Django中创建一个登录表单。 当我点击登录提交按钮时,它会出现错误

/ registration /的ValueError 视图registration.views.login未返回HttpResponse对象。

视图文件是

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')

和login.html文件是

<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>

3 个答案:

答案 0 :(得分:1)

您的登录视图将仅为POST请求返回HttpResponse(在表单提交上)。当您将浏览器发送到登录页面时,它会发出GET请求,而您的视图中不会处理该请求

我建议您阅读有关用户身份验证的更多信息:doc

如上所述,使用renderrender_to_response函数from django.shortcuts

答案 1 :(得分:0)

您可能希望使用呈现给定模板并返回HttpResponse的direct_to_template而不是render_to_response

参考render_to_response。注意;您必须使用from django.shortcuts import render_to_response

导入它

答案 2 :(得分:0)

为什么不使用render_to_response

您的问题的答案是您没有返回Httpresponse对象

如果您的登录成功,那么只有您将重定向到成功。

试试这个

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

不要忘记导入context_instance,如

from django.template import RequestContext