我有一个自定义用户的django项目(类似于this一个,所以我可以使用电子邮件而不是用户名)。
我正在创建一个AJAX登录但它一直返回500错误,我发现很难调试。我在视图中的代码是:
@require_AJAX
def login(request):
if request.method == 'POST':
email = request.POST['email_address']
password = request.POST['password']
print email, password
user = authenticate(email=email, password=password)
print user
if user is not None:
if user.is_active:
print 'starting to work'
login(request, user)
print 'it worked'
response = HttpResponse(json.dumps({'code':'ok'}), content_type='application/json')
else:
response = HttpResponse(json.dumps({'code':'inactive'}), content_type='application/json')
else:
print 'user is none'
response = HttpResponse(json.dumps({'code':'notok'}), content_type='application/json')
return response
除了用户是活跃用户之外,所有部分都正常工作,然后登录(请求,用户)似乎因某种原因失败(我开始工作'打印到控制台但是没有'它起作用了。
有谁知道为什么会这样,或者他们可以建议我如何在控制台中显示异常?
答案 0 :(得分:1)
它没有工作的原因是因为我已经命名了视图登录,这与内置于django的login()函数相同。愚蠢。将其重命名为ajax_login,一切都按预期工作。
答案 1 :(得分:0)
由于login(request, user)
调用,您的Django应用程序正在抛出错误500。它失败的原因是因为你传递了两个参数(request
和user
),即使方法定义只需要传入一个参数(request
,如def login(request)
)。我认为逻辑似乎有些问题,因为你可能不会期望在这一点上进行递归调用。
相反,我建议您使用Django身份验证系统。它提供了对用户进行身份验证的适当方法,例如:
from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
您应该仔细查看我从中获取此代码片段的Django文档。关于如何使用身份验证系统有一个更复杂的示例:Authenticating Users。