为了想要使用django内置的auth_user表字段,但是有些字段没有,想要定制于是我们可以:
首先导入:
from django.contrib.auth.models import User, AbstractUserfrom django.db import models 然后这么写:
class UserInfo(AbstractUser): """ 用户信息 """ nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=11, null=True, unique=True) def __str__(self): return self.username
然后你会发现:
这是djang的认证模块
导入:
from django.contrib import auth user = auth.authenticate(request,username=user_name, password=pwd) 这么写你会发现一直返回None,因为使用自定用户模型,也就是你自己创的表 当你创建自定义用户模型的时候,并且设置了AUTH_USER_MODEL的时候,django不会提供默认User模型,也就不会创建对应的数据库表,由于连表都没有创建所以这时候使用django的authenticate一直会返回空None,由于此时不再是django中内置模型User,那么必须使用自定义后端认知处理 解决方法: 在你的应用下面创建这么一个文件,backends.py#自定义后端认证组件 from django.contrib.auth.backends import BaseBackend from blogProject.models import UserInfo class CustomAuthBackend(BaseBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: user = UserInfo.objects.get(username=username) if user.check_password(password): return user except UserInfo.DoesNotExist: return None
那么django就会使用你自定义认证了,最后一部还需设置
在你的项目的 settings.py
文件中,指定使用自定义的认证后端来处理用户认证请求。
加上:
AUTHENTICATION_BACKENDS = [
'yourapp.backends.CustomAuthBackend',
# 其他认证后端...
]