1、關於django項目中的文件夾中的__init__.py文件。該文件的做用是:告訴python解釋器此文件夾是python模塊文件夾。什麼意思呢?好比,我在一個django工程裏新建了一個普通文件夾,裏面是沒有__init__.py文件的,如圖:,他會提示沒有相應模塊,而當我在裏面新建了一個__init__.py文件後,就變成:
。之後隨着工程愈來愈複雜,一定要新建不少文件夾來存放更多的py文件,這個步驟必定不能漏(雖然pycharm新建python文件夾的時候會一併建立__init__.py)。python
2、關於makemigration和migrate(兩個都是數據遷移)。這兩個manage.py裏面的命令都是和數據庫有關的,makemigration是記錄models.py裏面模型的變化並將之保存爲一個py文件,py文件保存到migration文件夾中,以以下的格式保存:數據庫
class Migration(migrations.Migration): dependencies = [ ('TTEST', '0001_initial'), ] operations = [ migrations.AddField( model_name='test', name='hehe', field=models.IntegerField(default=3), ), ]
而migrate則是讀取migration文件夾相應的py文件,而後對數據內的表進行相應地變化,如上圖的代碼用migrate命令執行完後的變化:django
migrate有一個我的以爲挺好的方面,就是在models.py下刪除了某個類的某項屬性,不會刪除有數據的列。例如剛剛的「hehe」列,假若有一項數據id=1,haha=1,hehe=1,則桑我註銷掉hehe這屬性時,再執行makemigration和migrate以後,數據庫的「hehe」不會被移除ide
class Test(models.Model): haha = models.IntegerField(default=2,unique=True) # hehe = models.IntegerField(default=3,unique=False)
這個設定避免了編碼時可能出現註銷錯了致使的數據丟失。ui
3、關於繼承AbstractUser這個類。AbstractUser類是django提供的一個用戶類,要使用繼承AbstractUser的用戶類,須要在settings加入以下代碼:編碼
AUTH_USER_MODEL = 'blog.Man'
如果工程中自定義的User須要繼承AbstractUser的話,必定要注意,User如果添加一個新的字段,注意要爲該字段添加默認值,或者設置可爲空。爲何呢?由於django的models在migrate的時候,如果沒有類繼承AbstractUser,就會默認在數據庫中建一個auth_user表來保存超級用戶的數據,而如果繼承了AbstractUser類,超級用戶的數據就會保存到該表中。此時若是擴展了更多的字段,可是沒有默認值或者沒有設置容許爲空的話,就會有以下的提示:spa
You are trying to add a non-nullable field 'sex' to user without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit, and let me add a default in models.py Select an option
所以在繼承了Abstractuser類的用戶類添加更多字段時,要注意添加默認值或者設置爲空.code