您的位置:首页 > 编程语言 > Go语言

Django---自定义认证

2018-12-01 11:00 323 查看

自定义认证:

一个用户可以通过用户名+密码登录,也可以通过手机号+密码登录

创建用户数据库:

系统自带一个User的数据库,但属性可能不是我们想要的,所以自己创建一个My_User数据库

现在settings中:

# 设置自定义用户
AUTH_USER_MODEL = "t06.MyUser

然后在models中:

from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
phone = models.CharField(
max_length=13,
verbose_name="手机号"
)
# 如果是追加的字段 我们需要设置null=True 或者default
age = models.IntegerField(
verbose_name="年纪",
default=1
)

注册:

if not My_User.objects.filter(username=name).exists():

exists():判断这个数据库里有没有这个数据,有就返回True;反之相反。

user = User.objects.create_user(username=name, password=pwd)

创建这个用户,用create_user

登录:

认证:

user1 = authenticate(username=name, password=pwd)

系统有一个autuenticate函数可以认证用户名和对应的密码。如果可以就返回这个用户user1,如果不可以就返回None。

重写函数autuenticate:

在app目录下创建auth.py

from django.contrib.auth.backends import ModelBackend
from .models import MyUser

class MyBackend(ModelBackend):

def authenticate(self, request, username=None, password=None, **kwargs):
# 找人
print("进入函数")
try:
user = MyUser.objects.get(username=username)
print("没找到")
except Exception:
try:
user = MyUser.objects.get(新认证属性=username)
except Exception as e:
print(username, e)
return None
print("拿到用户",user.username)
# 密码校验
if user.check_password(password):
return user
else:
return None

在settings中加入:

# 设置自定义认证
AUTHENTICATION_BACKENDS = (
"app名.auth.MyBackend",
)

登录:

login(req, user1)

系统有login这个登录函数

logout(req)

系统有logout这个退出登录函数

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: