目錄
1,創建文件app>xfzauth>models.py(用戶名的邏輯)
一。關係用戶系統:
- 使用Django內置User系統
- 需要重新定製
- 前後臺使用同一個User系統
一。自定義User模型:
- 創建一個用戶,管理用戶信息
- 全部重寫,繼承自AbstractBaseUser
- 定義UserManager
- 設置AUTH_USER_MODEL
- 映射到數據庫中
-------------------------------------------
1,創建文件app>xfzauth>models.py(用戶名的邏輯)
#encoding: utf-8
from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager
from shortuuidfield import ShortUUIDField
from django.db import models
class UserManager(BaseUserManager):
def _create_user(self,telephone,username,password,**kwargs):
if not telephone:
raise ValueError('請傳入手機號碼!')
if not username:
raise ValueError('請傳入用戶名!')
if not password:
raise ValueError('請傳入密碼!')
user = self.model(telephone=telephone,username=username,**kwargs)
user.set_password(password)
user.save()
return user
def create_user(self,telephone,username,password,**kwargs):
kwargs['is_superuser'] = False
return self._create_user(telephone,username,password,**kwargs)
def create_superuser(self,telephone,username,password,**kwargs):
kwargs['is_superuser'] = True
kwargs['is_staff'] = True
return self._create_user(telephone,username,password,**kwargs)
class User(AbstractBaseUser,PermissionsMixin):
# 我們不使用默認的自增長的主鍵
# id:100,101,102,103
# uuid/shortuuid
# Shortuuidfield:pip install django-shortuuidfield
uid = ShortUUIDField(primary_key=True)
telephone = models.CharField(max_length=11,unique=True)
email = models.EmailField(unique=True,null=True)
username = models.CharField(max_length=100)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
data_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'telephone'
# telephone,username,password
REQUIRED_FIELDS = ['username']
EMAIL_FIELD = 'email'
objects = UserManager()
def get_full_name(self):
return self.username
def get_short_name(self):
return self.username
2,執行數據庫(執行)
migrate