0

我正在 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>
4

3 回答 3

1

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

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

如前所述,使用renderrender_to_response功能from django.shortcuts

于 2012-08-28T11:11:55.607 回答
0

而不是direct_to_template您可能想要使用render_to_responsewhich 呈现给定模板并返回 HttpResponse。

请参阅render_to_response。笔记; 你将不得不使用导入它from django.shortcuts import render_to_response

于 2012-08-28T11:11:05.023 回答
0

你为什么不使用render_to_response

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

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

尝试这个

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

不要忘记像这样导入 context_instance

from django.template import RequestContext
于 2012-08-28T11:12:28.370 回答