標籤:技術 meta 分層 length 模組 banner 執行個體 har ges
1、避免循環參考:A引用B,B引用A
解決這種問題的方法就是app分層,前面我們設計了4個app,現在把與使用者操作相關的放在operation models.py中就可以解決問題:
2、郵箱驗證碼的models和banner輪播圖的models都放在users/models.py檔案中(因為與另外幾個關係不大)
"""import規範: 第一部分為python內建模組 第二部分為第三方倒入模組 第三部分為自訂模組"""from datetime import datetimefrom django.db import modelsclass EmailVerifyRecord(models.Model): """郵箱驗證碼models""" code = models.CharField(max_length=20, verbose_name=u‘驗證碼‘) email = models.EmailField(max_length=50, verbose_name=u‘郵箱‘) # 郵箱驗證碼有兩種類型:註冊和找回忘記的密碼 send_type = models.CharField(choices=((‘register‘, u‘註冊‘),(‘forget‘,u‘找回密碼‘)), max_length=10) # 驗證碼發送時間 # 這裡注意now後面不能加(),加了時間就是類編譯的時間,不加就是執行個體化的時間,這裡是需要執行個體化時間 send_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = u‘郵箱驗證碼‘ verbose_name_plural = verbose_nameclass Banner(models.Model): """輪播圖models""" title = models.CharField(max_length=100, verbose_name=u‘標題‘) image = models.ImageField(upload_to=‘banner/%Y/%m‘, verbose_name=u‘輪播圖‘, max_length=100) url = models.URLField(max_length=200, verbose_name=u‘訪問地址‘) index = models.IntegerField(default=100, verbose_name=u‘輪播順序‘) add_time = models.DateTimeField(default=datetime.now, verbose_name=u‘添加時間‘) class Meta: verbose_name = u‘輪播圖‘ verbose_name_plural = verbose_name
users/models.py全代碼,如下
"""import規範: 第一部分為python內建模組 第二部分為第三方倒入模組 第三部分為自訂模組"""from datetime import datetimefrom django.db import models# AbstractUser包含的Django預設產生的user欄位from django.contrib.auth.models import AbstractUser# Create your models here.class UserProfile(AbstractUser): """繼承AbstractUser類,自字義新類添加資料庫欄位""" # default=‘‘預設為空白 nick_name = models.CharField(max_length=50, verbose_name=u‘暱稱‘, default=‘‘) # null=True, blank=True允許使用者不填寫 birday = models.DateField(verbose_name=u‘生日‘, null=True, blank=True) # choices屬性, 提供被選資料,這裡性別只有男和女 gender = models.CharField(max_length=5, choices=((‘male‘,u‘男‘), (‘female‘, u‘女‘)), default=‘female‘, verbose_name=u‘性別‘) #性別 address = models.CharField(max_length=100, default=u‘‘, verbose_name=u‘地址‘) mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name=u‘手機號‘) # upload_to指定頭像上傳檔案夾 image = models.ImageField(upload_to=‘image/%Y/%m‘, default=u‘image/default.png‘, verbose_name=u‘頭像‘,max_length=100) class Meta: verbose_name = r‘使用者資訊‘ verbose_name_plural = verbose_name def __unicode__(self): """重載函數,使自訂字串能列印""" return self.usernameclass EmailVerifyRecord(models.Model): """郵箱驗證碼models""" code = models.CharField(max_length=20, verbose_name=u‘驗證碼‘) email = models.EmailField(max_length=50, verbose_name=u‘郵箱‘) # 郵箱驗證碼有兩種類型:註冊和找回忘記的密碼 send_type = models.CharField(choices=((‘register‘, u‘註冊‘),(‘forget‘,u‘找回密碼‘)), max_length=10) # 驗證碼發送時間 # 這裡注意now後面不能加(),加了時間就是類編譯的時間,不加就是執行個體化的時間,這裡是需要執行個體化時間 send_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = u‘郵箱驗證碼‘ verbose_name_plural = verbose_nameclass Banner(models.Model): """輪播圖models""" title = models.CharField(max_length=100, verbose_name=u‘標題‘) image = models.ImageField(upload_to=‘banner/%Y/%m‘, verbose_name=u‘輪播圖‘, max_length=100) url = models.URLField(max_length=200, verbose_name=u‘訪問地址‘) index = models.IntegerField(default=100, verbose_name=u‘輪播順序‘) add_time = models.DateTimeField(default=datetime.now, verbose_name=u‘添加時間‘) class Meta: verbose_name = u‘輪播圖‘ verbose_name_plural = verbose_name
Django打造線上教育平台_day_2:建立users app 編寫models之完善