是否可以编写登录功能的代码而无需使用django的authenticate&登录方法?

时间:2011-10-13 05:11:44

标签: python django authentication login

到目前为止,我已经使用django的默认身份验证和登录方法来获取我的项目的登录代码。请参阅下面的代码,

“我的登录代码”

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        if(len(username.strip(' ')) == 0):
            return render_to_response('login.html', {'error_message': 'Username should not be empty', 'username': username}, context_instance=RequestContext(request))
        if(len(password.strip(' ')) == 0):
            return render_to_response('login.html', {'error_message': 'Password should not be empty', 'username': username}, context_instance=RequestContext(request))
        authuser = authenticate(username=username, password=password)
        if authuser and authuser.is_active:
            try:
                login(request, authuser)
            except (RuntimeError, TypeError, NameError):
                errmessage = ERROR_MESSAGE % (RuntimeError, TypeError, NameError)
                CapturLog().logdata(request, 'LoginError', 'Login', errmessage)
            else:
                CapturLog().logdata(request, 'Login', 'Login', 'Successfully Logged In')
            return HttpResponseRedirect(reverse('index:home'))
        else:
            return render_to_response('login.html', {'error_message': 'Invalid User', 'username': username}, context_instance = RequestContext(request))
    return render_to_response('login.html', context_instance=RequestContext(request)) 

这段代码效果很好,但我不想使用django的默认方法。相反,我想用自己的方法检查身份验证和登录。是否有可能? 我在上面的代码中添加了一些代码用于身份验证,如下所示,

 authuser = _authenticate_check(username, password)

 def _authenticate_check(username=None, password=None):
    try:
        if '@' in username:
            user = User.objects.get(email=username)
        else:
            user = User.objects.get(username=username)
    except User.DoesNotExist:
        return None
    # now check the password
    if user.check_password(password):
                return user

然后,如果我尝试login(request, user),它就不起作用。它显示此行中的错误(即没有找到后端) 是否可以编写用于身份验证的手动代码。登录而不是使用django的默认方法?
提前致谢 !

1 个答案:

答案 0 :(得分:1)

简单回答:当然你可以写自己的。这个模块就是一个python模块,它可以让你在没有大量工作的情况下使用。

真正的答案:他们可能做了你想要的一切,而且已经更多了,而且Django的整个哲学都是DRY(不要重复自己),所以如果它是内置的并且可以处理你的情况,那么使用它而不是重新发明轮子。

你当然可以编写自己的身份验证方法,但是你没有在这篇文章中提出一个好的论据。仅仅因为你已经倾注了文档并且你感觉不舒服,这是不够的。查看当前可用的工具是否有效。如果没有,那么是时候定义为什么/为什么没有,以及你需要什么来完成你想要的。

如果您花时间了解它们如何协同工作,内置会话,用户,群组就非常棒。