Django项目实战 - 配置使用username或email登录
第一步 在users views.py编写CustomBackends类
# _*_ coding:utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login # import 登录和认证模块
from django.contrib.auth.backends import ModelBackend # import ModelBackend类
from .models import UserProfile # import UserProfile 为了获取用户的username或者email
from django.db.models import Q # import Q用来做逻辑判断
# 重写authenticate
class CustomBackend(ModelBackend):
def authenticate(self, 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
def user_login(request):
if request.method == "POST":
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
user = authenticate(username=user_name, password=pass_word)
if user:
login(request, user)
return render(request, "index.html")
else:
return render(request, "login.html", {"msg": u"用户名或密码错误"})
elif request.method == "GET":
return render(request, "login.html", {})
第二步配置settings.py
重载变量,将上面写的类配置进来
AUTHENTICATION_BACKENDS = ("users.views.CustomBackend",)
配置完成后,就可以同时使用username或email地址进行登录。

浙公网安备 33010602011771号