django 使用邮箱登录(扩展用户表、继承 AbstractUser)
2023-03-07 09:45:55 时间
# 前提
继承 django 自带的用户类(AbstractUser)
# 环境
1. python: 3.6.x
2. django==1.11.22
# apps/users/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
"""
用户
"""
gender_choice = (
("1", "男"),
('0', "女"),
)
email = models.EmailField(verbose_name='邮箱', max_length=255, unique=True)
phone = models.CharField(verbose_name="手机号码", max_length=50, null=True, blank=True)
avatar = models.URLField(verbose_name="用户头像", default="http://photo.xxx.top/avatar_default.png")
gender = models.CharField(max_length=32, choices=gender_choice, default="男", verbose_name="性别")
time_black = models.DateTimeField(verbose_name="下次可访问时间", blank=True, null=True)
last_ip = models.GenericIPAddressField(verbose_name="上次访问IP", default="0.0.0.0")
class Meta:
verbose_name = "用户信息"
verbose_name_plural = "用户信息列表"
def __str__(self):
return "%s-%s %s" % (self.username[0].upper(), self.last_name, self.first_name)
# apps/users/views.py(不局限于邮箱,也可以改成 手机号码等等,但是要注意字符类型)
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from .models import UserProfile
# Create your views here.
# 让用户可以用邮箱登录
# setting 里要有对应的配置 AUTHENTICATION_BACKENDS
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
注意:当报错误 {"non_field_errors":["无法使用提供的认证信息登录。"]},请尝试在 authenticate 里面加上 request,如:authenticate(self, request, username=None, password=None, **kwargs)
# settings.py
ALLOWED_HOSTS = ["*"]
AUTH_USER_MODEL = 'users.UserProfile'
AUTHENTICATION_BACKENDS = (
'apps.users.views.CustomBackend', # AUTH 方法(支持邮箱登录),CustomBackend 的路径
)
相关文章
- DEV c++点击f5刷新运行代码,会闪退,点击运行却不会闪退。怎么解决?
- 【代码笔记】c语言实现生成随机数
- 使用阿里云后的个人感言
- 人生第一次使用ECS服务器
- MongoDB Spark Connector 实战指南
- SAP QM完成使用决策后库存没能自动过账?
- 在ecs 上部署asp core api 项目
- [代码笔记]php+mysql实现模糊搜索关键词功能
- 【Typecho JOE 模板改动】设置不自动跳转到指定评论位置,优化seo
- 谷歌翻译将终止大陆地区翻译服务,chrome将不能进行网页翻译
- 感谢阿里云
- 【php】关闭PHP错误提示方法,防止错误信息泄露
- 阿里云服务器高校学生体验
- PHP发送post请求的三种方法
- ECS两周的使用感受
- 浅谈ECS使用体验
- 阿里云虚拟主机、轻量应用服务器和ECS云服务器的区别
- 弹窗广告新规开始实施,广告需可一键关闭
- ESC初次使用与体验
- 浅析基于EasyCVR视频与AI智能检测技术的水利可视化监管方案设计