单人做网站需要掌握哪些知识,项目管理软件 开源,山西建设网站公司,怎么看一个网站做外链Django多字段认证
需求#xff1a;
django认证的检查用户是username#xff0c;如果使用 username和 手机号验证登录。
重写#xff1a;
ModelBackend 类下的 authenticate 方法
# 在对应应用下创建 utils.py 修改Django认证类#xff0c;为了实现 …Django多字段认证
需求
django认证的检查用户是username如果使用 username和 手机号验证登录。
重写
ModelBackend 类下的 authenticate 方法
# 在对应应用下创建 utils.py 修改Django认证类为了实现 username和手机号登录 from django.contrib.auth.backends import ModelBackend
from django.db.models import Qfrom .models import Userdef get_user_by_account(account):通过传入的账号动态获取 user 模型对象:param account: 有可能是手机号有可能是用户名:return: 返回user对象或Nonetry:# Q查询 |或; :与; ~非;user User.objects.get(Q(usernameaccount) | Q(mobileaccount))except User.DoesNotExist as e:logger.error(fNo user found with account: {account}. Error: {e})return Noneelse:# 这里返回的是 User 模型的一个实例即一个用户对象不是 User 模型类本身。return userclass UsernameModelAuthBackend(ModelBackend):# 重写 ModelBackend类下的 authenticate 方法def authenticate(self, request, usernameNone, passwordNone, **kwargs):# 获取useruser get_user_by_account(accountusername)# 判断前端传入的密码是否正确if user and user.check_password(password):logger.info(f{user} ,authentication is successful )# 返回userreturn user# 如果没有找到用户或密码不正确返回 Nonelogger.warning(Authentication failed: either the user does not exist or the password is incorrect.)return None修改setting.py
# setting.py 修改django认证后端类
# django认证的检查用户是username, 默认是 django.contrib.auth.backends.ModelBackend
# AUTHENTICATION_BACKENDS [django.contrib.auth.backends.ModelBackend]
# 修改为自定义的用户验证类 它也继承了 ModelBackend, 导包
AUTHENTICATION_BACKENDS [users.utils.UsernameModelAuthBackend]