首页 > 其他 > 详细

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

时间:2018-06-15 11:58:29      阅读:223      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/xinjie57/p/9186256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!