這次的模型繼承AbstractUser類,里面自帶了一些屬性,再新建下邊的屬性:
from django.db import models
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
nickname = models.CharField(max_length=50,verbose_name="昵稱",default='')
birday = models.DateField(verbose_name = "生日",null=True,blank=True)
gender = models.CharField(choices=(("male","男"), ("female","女")), max_length=5, default="female")
address = models.CharField(max_length=100,default="")
mobile = models.CharField(max_length=11,null=True,blank=True)
image = models.ImageField(upload_to="image/%Y/%m",default="image/default.png")
class Meta:
verbose_name = "用戶信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
其中ImageField功能需要pillow包,安裝到虛擬環境里。settings里把users放到installed_apps里,再加上個
AUTH_USER_MODEL = "users.UserProfile"
其中users為app名,UserProfile為模型類名
然后數據遷移makemigration和migrate。
本項目需要3個主要應用,包括users、organisations、courses。要避免這三個應用循環引用,可以再創建一個應用叫operations,用于處理這三個應用的交互。另外有些功能用的比較少,隨便找個地方放就行,我們就決定放在users里了。包括驗證郵箱發驗證碼和輪播圖。都放在users的models.py里了。
from django.db import models
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
nickname = models.CharField(max_length=50,verbose_name="昵稱",default='')
birday = models.DateField(verbose_name = "生日",null=True,blank=True)
gender = models.CharField(choices=(("male","男"), ("female","女")), max_length=5, default="female")
address = models.CharField(max_length=100,default="")
mobile = models.CharField(max_length=11,null=True,blank=True)
image = models.ImageField(upload_to="image/%Y/%m",default="image/default.png")
class Meta:
verbose_name = "用戶信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
class EmailVerifyRecord(models.Model):
code = models.CharField(max_length=20, verbose_name="驗證碼")
email = models.EmailField(max_length=50,verbose_name="郵箱")
send_type = models.CharField(choices=(("register","注冊"),("forget","忘記密碼")),max_length=10)
send_time = models.DateTimeField(default=datetime.now)
class Meta:
verbose_name = "郵箱驗證碼"
verbose_name_plural = verbose_name
class Banner(models.Model):
title = models.CharField(max_length=100, verbose_name="標題")
image= models.ImageField(upload_to="banner/%Y/%m", verbose_name="輪播圖",max_length=100)
url = models.URLField(max_length=200,verbose_name="訪問地址")
index = models.IntegerField(default=100, verbose_name="順序")
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加時間")
class Meta:
verbose_name = "輪播圖"
verbose_name_plural = verbose_name
其中驗證碼類里的send_time用于記錄發驗證碼的時間,已設置超時過期。default=datetime.now中如果寫now()則會返回創建項目的時間。datetime功能需要import。輪播圖的url用于記錄每個圖片的超鏈接地址,index用于記錄輪播圖的序號(順序)。