首先在settings配置里面添加backend:
AUTHENTICATION_BACKENDS = ( 'users.views.CustomBackend', )
在 users > views.py中添加backend函数:
# 实现 用户名和邮箱都可以登录 class CustomBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: user = UserProfile.objects.get(Q(username=username) | Q(email=username)) if user.check_password(password): return user except Exception as e: return None
修改后的views.py内容是:
from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login from django.contrib.auth.backends import ModelBackend from .models import UserProfile from django.db.models import Q # Create your views here. def user_login(request): if request.method == 'GET': return render(request, 'login.html', {}) if request.method == 'POST': user_name = request.POST.get('username', '') pass_word = request.POST.get('password', '') # 成功返回user,失败返回None user = authenticate(username=user_name, password=pass_word) if user is not None: login(request, user) # 直接登录 return redirect('home') else: return render(request, 'login.html', {'msg': '用户名或密码错误。'}) # 实现 用户名和邮箱都可以登录 class CustomBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: user = UserProfile.objects.get(Q(username=username) | Q(email=username)) if user.check_password(password): return user except Exception as e: return None