Django登录不使用自定义用户

时间:2015-07-13 12:39:38

标签: python ajax django

我有一个自定义用户的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

除了用户是活跃用户之外,所有部分都正常工作,然后登录(请求,用户)似乎因某种原因失败(我开始工作'打印到控制台但是没有'它起作用了。

有谁知道为什么会这样,或者他们可以建议我如何在控制台中显示异常?

2 个答案:

答案 0 :(得分:1)

它没有工作的原因是因为我已经命名了视图登录,这与内置于django的login()函数相同。愚蠢。将其重命名为ajax_login,一切都按预期工作。

答案 1 :(得分:0)

由于login(request, user)调用,您的Django应用程序正在抛出错误500。它失败的原因是因为你传递了两个参数(requestuser),即使方法定义只需要传入一个参数(request,如def login(request))。我认为逻辑似乎有些问题,因为你可能不会期望在这一点上进行递归调用。

相反,我建议您使用Django身份验证系统。它提供了对用户进行身份验证的适当方法,例如:

from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')

您应该仔细查看我从中获取此代码片段的Django文档。关于如何使用身份验证系统有一个更复杂的示例:Authenticating Users