django+xadmin在线教育平台(七)

4-3 新建项目

Python2.7 创建虚拟环境。

mkvirtualenv mxonline2

安装django

pip install django==1.9.8 

注意Python2下此处必须用1.9.8

 
django+xadmin在线教育平台(七)
mark

Python3.x 创建虚拟环境

如果你已经通过我的博文《Python开发环境搭建指南(Anaconda2,3共存)》
搭建了完美的共存环境使用下面命令创建虚拟环境

mkvirtualenv -p D:softEnvDownAnaconda2envspy3python.exe mxonline3

-p后面路径为自己的Python3的exe文件路径。

 
django+xadmin在线教育平台(七)
mark

官方说明的最新稳定版为2.0.1(2018-01-08 19:37:06)

workon mxonline3
pip install django==2.0.1
 
django+xadmin在线教育平台(七)
mark

至此我们的两个虚拟环境都已经准备好了。

新建Python2 下Project

为Mxonline2 配置环境 mxonline2

 
django+xadmin在线教育平台(七)
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

 
django+xadmin在线教育平台(七)
mark

新建Python3 下Project

为Mxonline3 配置环境 mxonline3

 
django+xadmin在线教育平台(七)
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

 
django+xadmin在线教育平台(七)
mark

可以为2,3配置不同的port。比如2: 8002 & 3: 8003

2: 点击run运行: django1.9.8成功画面如下。

 
django+xadmin在线教育平台(七)
mark

3: 点击run运行: django2.0.1成功画面如下。

 
django+xadmin在线教育平台(七)
mark

这时我们的项目就新建成功。

此处对应commit:

项目初始化成功: 完成数据库Migration初始化。 对应4-3

4-4 自定义userprofile

点击Tools 菜单下 Run manage.py Task

startapp users

编写我们的model设计user表。

系统自动生成的user表如下:

 
django+xadmin在线教育平台(七)
mark
  • id: 主键, password 密码, last_login Django自动记录用户最后登录时间,。
  • is_superuser 表明用户是否是超级用户(后台管理会用到)。
  • username 用户名字段不要随便改动, email 邮箱,
  • is_staff 表示是否是员工(后台管理会用到)。
  • is_active 用户是否是激活状态, date_joined 注册时间。

我们需要扩展我们自己的需求字段。

个人中心页面中:

 
django+xadmin在线教育平台(七)
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"
 
django+xadmin在线教育平台(七)
mark

点击Tools 菜单下 Run manage.py Task

makemigrations users
migrate users
 
django+xadmin在线教育平台(七)
mark

上图中可以看到数据库做出的改动。输入: yes

进入Navicat进行验证

 
django+xadmin在线教育平台(七)
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
 
django+xadmin在线教育平台(七)
mark

共11张表,同期django1.9.8会产生13张表

 
django+xadmin在线教育平台(七)
mark

我推测是因为在django2.0版本中。我们如果自定义了userProfile并且在setting中进行了设置。那么auth_user将不再拥有多的表。

下次不要再初始化时执行makemigrations & migrate。当我们设计userProfile完成之后再执行。

本小节完成对应commit:

完成USerProfile models书写。makemigrations & migrate 建表成功。对应4-4



原文学习来自简书,作者:天涯明月笙
原文链接:https://www.jianshu.com/p/18805c0c17ba