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在线教育平台(七)的更多相关文章

  1. django+xadmin在线教育平台(一)

    大家好,此教程为在慕学网的实战教程Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台的学习笔记,不对望指正! 使用Django+Xadmin打造在线教育平台(Python2, ...

  2. django+xadmin在线教育平台(五)

    3-3 django orm介绍与model设计 上节教程完成后代码(来学习本节前置条件): 对应commit: 留言板前端页面展示.本次内容截止教程3-2结束. 可能现在你还在通过手写sql语句来操 ...

  3. django+xadmin在线教育平台(四)

    3-2 配置表单页面 必要的该说的,该了解的 前置条件: 你已经学习了前面教程.将项目的文件夹目录结构,setting配置等修改完毕与我保持一致. 本节通过Django快速的配置一个留言板页面来学习 ...

  4. django+xadmin在线教育平台(十)

    剩余app model注册 courses注册 新建courses/adminx.py: # encoding: utf-8 __author__ = 'mtianyan' __date__ = '2 ...

  5. django+xadmin在线教育平台(十六)

    7-7 modelform 提交我要学习咨询1 对应表userask form会对字段先做验证,然后保存到数据库中. 可以看到我们的forms和我们的model中有很多内容是一样的.我们如何让代码重复 ...

  6. django+xadmin在线教育平台(六)

    4-1 使用py3.6和django1.11开发系统前注意事项 直接通过Python3.6和django最新版本来开发我们的系统的一些注意事项. 原版本: Python 2.7 & djang ...

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

    8-1 课程列表 拷贝课程列表页到template目录 创建课程相关的urls.py Mxonline2/urls.py中声明包含到course的url中: # 课程app的url配置 url(r&q ...

  8. django+xadmin在线教育平台(十五)

    7-4 课程机构列表页数据展示2 前去html中进行数据填充   mark 可以看到所有城市是通过a标签,当前选中城市为active.   mark 之后把下面的写死的城市删除掉.   mark 这时 ...

  9. django+xadmin在线教育平台(十四)

    7-1 django templates模板继承1 机构可以筛选类别 机构可以根据所在地区进行分类 右侧我要学习功能: form表单提交 右下:授课机构排名 页面头部与底部为全局头和全局底部. Dja ...

随机推荐

  1. VCL

    vcl常用配置 不缓存摸一个资源 在vcl_recv中 if (req.url ~ "private") { return (pass); } 动静分离 先定一个多个backend ...

  2. 记一次无法登录 wine QQ

    入Linux坑第X天,过了五一小长假,回来布置我的环境,本来不应该装一些不必要的东西分自己心,但还是装上,以便不时之需. 把输入法装好后,就安装了QQ,查过资料,都说wine_QQ国际版可以使用,于是 ...

  3. 新建mavent项目报错

    1.找到自己项目 项目名\.settings\org.eclipse.wst.common.project.facet.core.xml 将<installed facet="jst. ...

  4. mysql java 通用AES加密

    最近有个需求,需要对数据库某些字段加密,调研发现采用AES加密的方式较多,而且反向解密速度快,符合需求,于是采用:下面是遇到的问题及相关代码 首先第一个问题,AES的秘钥是16位,mysql的密码长度 ...

  5. nopcommerce 3.6网银在线支付插件(源码)

    网银在线支付插件,下载后通过后台插件管理安装.配置即可使用. 下载:网银在线支付插件3.1.3.6版.rar (106.3KB) 源代码放在\Plugins目录下,用vs打开重新生成. 源地址:htt ...

  6. Redis的原子自增性

    INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那 ...

  7. [一个小问题]Mainfest配置文件的version问题小结

    问题起源自己安装好产品的新build,然后用自己本地编译出来的其中一个DLL去替换到产品中,本来以为可以正常执行,但是却发现这个新DLL无法被Load,无法被使用. 从Event Viewer里找到了 ...

  8. Unity Shader 阴影

    最近在看Unity shader开发实战详解,刚开始看阴影部分,稍微有了点思路.在这里写点笔记,算是小结吧. .阴影实现方法 一种是通过模拟光照的原理,用向量的方法 找到被光线照射的点 映射到平面的位 ...

  9. spring mvc踩坑记

    前言 主要介绍自己在学习spring mvc过程中踩到的一些坑,涉及到当时遇到这个错误是如何思考的,对思路进行总结,下次遇到类似的错误能够提供一些思路甚至快速解决. 环境准备 jdk8,spring4 ...

  10. PHP:substr和mb_substr的区别

    substr和mb_substr函数都是获取字符串中的某个部分 那么,它们的区别在哪儿呢? 区别: substr :全部是英语.数字就正常:但有一些的字元是占用多个位元的,substr()就得不到你预 ...