我正在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>
答案 0 :(得分:1)
您的登录视图将仅为POST请求返回HttpResponse(在表单提交上)。当您将浏览器发送到登录页面时,它会发出GET请求,而您的视图中不会处理该请求
我建议您阅读有关用户身份验证的更多信息:doc。
如上所述,使用render
或render_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