1. 程式人生 > >django+xadmin在線教育平臺(七)

django+xadmin在線教育平臺(七)

fine 定義 頭像 sta http origin upload ack naconda

4-3 新建項目

Python2.7 創建虛擬環境。

mkvirtualenv mxonline2

安裝django

pip install django==1.9.8 

註意Python2下此處必須用1.9.8

技術分享圖片 mark

Python3.x 創建虛擬環境

如果你已經通過我的博文《Python開發環境搭建指南(Anaconda2,3共存)》
搭建了完美的共存環境使用下面命令創建虛擬環境

mkvirtualenv -p D:\softEnvDown\Anaconda2\envs\py3\python.exe mxonline3

-p後面路徑為自己的Python3的exe文件路徑。

技術分享圖片 mark

官方說明的最新穩定版為2.0.1(2018-01-08 19:37:06)

workon mxonline3
pip install django==2.0.1
技術分享圖片 mark

至此我們的兩個虛擬環境都已經準備好了。

新建Python2 下Project

為Mxonline2 配置環境 mxonline2

技術分享圖片 mark

註意一直定位到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

技術分享圖片 mark

註意一直定位到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成功畫面如下。

技術分享圖片 mark

3: 點擊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

共11張表,同期django1.9.8會產生13張表

技術分享圖片 mark

我推測是因為在django2.0版本中。我們如果自定義了userProfile並且在setting中進行了設置。那麽auth_user將不再擁有多的表。

下次不要再初始化時執行makemigrations & migrate。當我們設計userProfile完成之後再執行。

本小節完成對應commit:

完成USerProfile models書寫。makemigrations & migrate 建表成功。對應4-4



原文學習來自簡書,作者:天涯明月笙
原文鏈接:https://www.jianshu.com/p/18805c0c17ba

django+xadmin在線教育平臺(七)