django 使用手机号码/邮箱email代替用户名username登陆
发布时间:2020-12-15 17:14:45 所属栏目:大数据 来源:网络整理
导读:django中有时候需要使用邮箱来登陆,而django默认是使用username来登录,解决办法是什么? 正常的登陆写法如下: from?django.views?import?Viewfrom?django.shortcuts?import?render,?redirectfrom?django.contrib.auth?import?authenticate,?loginclass?Lo
django中有时候需要使用邮箱来登陆,而django默认是使用username来登录,解决办法是什么? 正常的登陆写法如下: from?django.views?import?View from?django.shortcuts?import?render,?redirect from?django.contrib.auth?import?authenticate,?login class?LoginView(View): ????def?post(self,?request): ????????username?=?request.POST.get("username",?None) ????????password?=?request.POST.get("password",?None) ????????user?=?authenticate(username=username,?password=password)??#用户验证 ????????if?user: ????????????login(request,?user)??#用户登录 ????????????return?redirect('/index.html') ????????return?render(request,?"login.html") 从上述代码可以看到django登陆主要是基于authenticate,如果我们想要使用手机号码/邮箱来代替,那么可以重写authenticate() from?django.contrib.auth.backends?import?ModelBackend from?models?import?Users class?EmailBackend(ModelBackend): ????def?authenticate(self,?request,?username=None,?password=None,?**kwargs): ????????try: ????????????user?=?Employee.objects.get(Q(phone=username)?|?Q(email=username)) ????????except?Employee.DoesNotExist:??#?可以捕获除与程序退出sys.exit()相关之外的所有异常 ????????????return?None ????????if?user.check_password(password): ????????????return?user ???????????? ????def?get_user(self,?user_id): ????????try: ????????????return?Users.objects.get(id=user_id) ????????except?Users.DoesNotExist: ????????????return?None 然后在setting.py中添加以下代码 AUTHENTICATION_BACKENDS?=?( ????'app名字.views.EmailBackend',) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |