django+xadmin在線教育平臺(七)
4-3 新建項目
Python2.7 創建虛擬環境。
mkvirtualenv mxonline2
安裝django
pip install django==1.9.8
mark註意Python2下此處必須用1.9.8
Python3.x 創建虛擬環境
如果你已經通過我的博文《Python開發環境搭建指南(Anaconda2,3共存)》
搭建了完美的共存環境使用下面命令創建虛擬環境
mkvirtualenv -p D:\softEnvDown\Anaconda2\envs\py3\python.exe mxonline3
mark-p後面路徑為自己的Python3的exe文件路徑。
官方說明的最新穩定版為2.0.1(2018-01-08 19:37:06)
workon mxonline3
pip install django==2.0.1
mark
至此我們的兩個虛擬環境都已經準備好了。
新建Python2 下Project
為Mxonline2 配置環境 mxonline2
註意一直定位到Python.exe。
安裝mysql驅動。
下載https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python中
mysqlclient?1.3.12?cp34?cp34m?win_amd64.whl進行本地安裝
workon mxonline2
pip install mysqlclient-1.3.12-cp27-cp27m-win_amd64.whl
mark
新建Python3 下Project
為Mxonline3 配置環境 mxonline3
註意一直定位到Python.exe。
安裝mysql驅動。
workon mxonline3
pip install mysqlclient
setting中配置
Mxonline2/settings.py:
Mxonline3/settings.py:
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘mxonline2‘,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘你的密碼‘,
‘HOST‘:‘127.0.0.1‘
}
}
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘mxonline3‘,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘你的密碼‘,
‘HOST‘:‘127.0.0.1‘
}
}
前往Navicat新建數據庫
mxonline2 & mxonline3
進行數據庫初始化makemigrations
點擊Tools 菜單下 Run manage.py Task
makemigrations
migrate
2,3操作一致
點擊 RUn edit
mark可以為2,3配置不同的port。比如2: 8002 & 3: 8003
2: 點擊run運行: django1.9.8成功畫面如下。
mark3: 點擊run運行: django2.0.1成功畫面如下。
mark這時我們的項目就新建成功。
此處對應commit:
項目初始化成功: 完成數據庫Migration初始化。 對應4-3
4-4 自定義userprofile
點擊Tools 菜單下 Run manage.py Task
startapp users
編寫我們的model設計user表。
系統自動生成的user表如下:
mark- id: 主鍵, password 密碼, last_login Django自動記錄用戶最後登錄時間,。
- is_superuser 表明用戶是否是超級用戶(後臺管理會用到)。
- username 用戶名字段不要隨便改動, email 郵箱,
- is_staff 表示是否是員工(後臺管理會用到)。
- is_active 用戶是否是激活狀態, date_joined 註冊時間。
我們需要擴展我們自己的需求字段。
個人中心頁面中:
mark可以看到我們還需要的有:
- 昵稱: nickname
- 生日: birthday
- 性別: gender
User表的自定義方法可以查看django官方文檔。
我們既想保留原有字段,又想有新字段。
users/models.py添加代碼:
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):
# 自定義的性別選擇規則
GENDER_CHOICES = (
("male", u"男"),
("female", u"女")
)
# 昵稱
nick_name = models.CharField(max_length=50, verbose_name=u"昵稱", default="")
# 生日,可以為空
birthday = models.DateField(verbose_name=u"生日", null=True, blank=True)
# 性別 只能男或女,默認女
gender = models.CharField(
max_length=5,
verbose_name=u"性別",
choices=GENDER_CHOICES,
default="female")
# 地址
address = models.CharField(max_length=100, verbose_name="地址", default="")
# 電話
mobile = models.CharField(max_length=11, null=True, blank=True)
# 頭像 默認使用default.png
image = models.ImageField(
upload_to="image/%Y/%m",
default=u"image/default.png",
max_length=100
)
# meta信息,即後臺欄目名
class Meta:
verbose_name = "用戶信息"
verbose_name_plural = verbose_name
# 重載Unicode方法,打印實例會打印username,username為繼承自abstractuser
def __unicode__(self):
return self.username
點進AbstractUser
可以看到這個models裏面就有我們默認表的那些字段。
因為Image字段需要用到pillow
所以需要安裝該庫
pip install pillow
註意:CharField必須有max_length, Imagefield實際也是charfield所以也要有max_length
setting設置INSTALLED_APPS & AUTH_USER_MODEL。
- INSTALLED_APPS註冊app
‘users‘
- 重載AUTH_USER_MODEL
# 此處重載是為了使我們的UserProfile生效
AUTH_USER_MODEL = "users.UserProfile"
mark
點擊Tools 菜單下 Run manage.py Task
makemigrations users
migrate users
mark
上圖中可以看到數據庫做出的改動。輸入: yes
進入Navicat進行驗證
mark如上圖可以看到我們的表已經生成成功。
附加Python3下不同與報錯:
將Unicode方法改為str方法
# 重載__str__方法,打印實例會打印username,username為繼承自AbstractUser
def __str__(self):
return self.username
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
admin.0001_initial is applied before its dependency users.0001_initial on
database ‘default‘
解決方案:
刪除數據庫中 除了auth_user的其他表
然後執行命令:
makemigrations
migrate
makemigrations users
migrate users
mark
mark共11張表,同期django1.9.8會產生13張表
我推測是因為在django2.0版本中。我們如果自定義了userProfile並且在setting中進行了設置。那麽auth_user將不再擁有多的表。
下次不要再初始化時執行makemigrations & migrate。當我們設計userProfile完成之後再執行。
本小節完成對應commit:
完成USerProfile models書寫。makemigrations & migrate 建表成功。對應4-4
原文學習來自簡書,作者:天涯明月笙
原文鏈接:https://www.jianshu.com/p/18805c0c17ba
django+xadmin在線教育平臺(七)