from django.contrib.auth.models import AbstractUser class User(AbstractUser): telephone = models.CharField(max_length=11, unique=True) school = models.CharField(max_length=100) <!--USERNAME_FIELD表明的是User模型的名字字段的字符串,具备惟一性。若是没有通过修改,默认就是username--> <!--如今,咱们将它修改成telephone,以后咱们对用户进行登陆验证的时候,就不用使用username了,而是使用telephone--> USERNAME_FIELD = 'telephone'
==最重要的是,若是咱们使用这种继承的方式修改了Django内置的User模型,那么咱们就须要第一次将User模型映射到数据库中的时候就要将User模型定义好。==html
from django.contrib.auth.models import AbstractUser, BaseUserManager <!--重写objects上的方法,之因此定义为UserManager类,是由于User.objects.返回的就是UserManager类--> class UserManager(BaseUserManager): <!--建立超级用户和普通用户的差异就是超级用户的is_super=True而普通用户的is_super=False,因此咱们能够定义一个广泛的函数用来实现两者的相同的部分,不一样的部分就在各个函数中单独定义--> <!--定义一个两边有一个下划线的方法,就表明这个方法是受到保护的,只能在这个类中使用--> def _create_user_(self,telephone, username, password, **kwargs): <!--首先判断telephone是否存在--> if not telephone: raise ValueError('请输入手机号!') if not password: raise ValueError('请输入密码!') <!--self:表明的是当前的这个类,咱们要为当前的这个类的模型User建立一个实例化的对象--> user = self.model(telephone=telephone, username=username, password=password) <!--一样设置密码的话,也能够使用这样的形式--> <!--user.set_password(password)--> <!--user.save()--> return user def create_user(self, telephone, username, password, **kwargs): kwargs['is_super'] = False return self._create_user_(telephone=telephone, username=username, password=password, **kwargs) def create_superuser(self, telephone, username, password, **kwargs): kwargs['is_super'] = True return self._create_user_(telephone=telephone, username=username, password=password, **kwargs) <!--而且须要在从新定义User的模型中,添加objects = UserManager()-->
from django.shortcuts import render from .models import User def index(request): user = User.objects.create_user(telephone="18833332222", username='孤烟逐云', password='111111') if user: print("建立成功!") print('%s' % user.username) else: print('fail!') return render(request,'abstractuser.html')
def index(request): user = User.objects.create_superuser(telephone="18833334444", username='小龙虾', password='111111') if user: print("建立成功!") print('%s' % user.username) else: print('fail!') return render(request,'abstractuser.html')
def index(request): # 登陆验证 telephone = request.GET.get('telephone') password = request.GET.get('password') <!--须要注意的是,这里的username对应的值是telephone,由于咱们在models.py文件中指定了USERNAME_FIELD='telephone'--> user = authenticate(request, username=telephone,password=password) if user: print('您查找的用户是:%s' % user.username) context = { 'user': user } return render(request, 'abstractuser.html', context=context)