加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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',)


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读