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)