到目前为止,我已经使用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的默认方法?
提前致谢 !
答案 0 :(得分:1)
简单回答:当然你可以写自己的。这个模块就是一个python模块,它可以让你在没有大量工作的情况下使用。
真正的答案:他们可能做了你想要的一切,而且已经更多了,而且Django的整个哲学都是DRY(不要重复自己),所以如果它是内置的并且可以处理你的情况,那么使用它而不是重新发明轮子。
你当然可以编写自己的身份验证方法,但是你没有在这篇文章中提出一个好的论据。仅仅因为你已经倾注了文档并且你感觉不舒服,这是不够的。查看当前可用的工具是否有效。如果没有,那么是时候定义为什么/为什么没有,以及你需要什么来完成你想要的。
如果您花时间了解它们如何协同工作,内置会话,用户,群组就非常棒。