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',)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。