学习自慕课网-使用python3.x与Django2.0.1开发的在线教育平台
开发环境:
python:3.6.4
Django:2.0.2
后台管理:xadmin
系统概括:
创建工程
django-adminstartprojectMxOnline然后开始项目的开发
项目的开发都是从models设计开始,后台的管理和前端的渲染无非就是对数据库的增删改查,所以models设计的好坏对整个项目的开发起着至关重要的因素。
下面是我画的图,可以很直观的看出来我们需要的models。
放大显示:
创建四个app
pythonmanage.pystartappuserspythonmanage.pystartappcoursepythonmanage.pystartapporganizationpythonmanage.pystartappoperation然后分别设计每个app的models
自定义userProfile
系统自动生成的user表如下:
users/models.py添加代码:
#users/models.pyfromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractUserclassUserProfile(AbstractUser):gender_choices=(('male','男'),('female','女'))nick_name=models.CharField('昵称',max_length=50,default='')birthday=models.DateField('生日',null=True,blank=True)gender=models.CharField('性别',max_length=10,choices=gender_choices,default='female')adress=models.CharField('地址',max_length=100,default='')mobile=models.CharField('手机号',max_length=11,null=True,blank=True)image=models.ImageField(upload_to='image/%Y%m',default='image/default.png',max_length=100)classMeta:verbose_name='用户信息'verbose_name_plural=verbose_namedef__str__(self):returnself.username然后做下面的一些设置
因为Image字段需要用到pillow所以需要安装该库
pipinstallpillow注册app
INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','users']重载AUTH_USER_MODEL
AUTH_USER_MODEL='users.UserProfile'设计数据库为Mysql
#DATABASES={#'default':{#'ENGINE':'django.db.backends.sqlite3',#'NAME':os.path.join(BASE_DIR,'db.sqlite3'),#}#}DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'mxonline',#数据库名字'USER':'root',#账号'PASSWORD':'123456',#密码'HOST':'127.0.0.1',#IP'PORT':'3306',#端口}}init.py里面导入pymysql模块
#user/__init__.pyimportpymysqlpymysql.install_as_MySQLdb()迁移数据库
pythonmanage.pymakemigrationspythonmanage.pymigrateuser中还需要添加的表(这些功能比较独立):
EmailVerifyRecord验证码
代码如下:
image上传到哪里
url是图片的路径
index控制轮播图的播放顺序
这样users的三张表就创建完了
写代码要根据PEP8规范
每个class之间要空两格
课程app中需要四张表
(1)Course课程表
(1)CourseOrg
classCourseOrg(models.Model):name=models.CharField('机构名称',max_length=50)desc=models.TextField('机构描述')click_nums=models.IntegerField('点击数',default=0)fav_nums=models.IntegerField('收藏数',default=0)image=models.ImageField('封面图',upload_to='org/%Y%m',max_length=100)address=models.CharField('机构地址',max_length=150,)city=models.ForeignKey(CityDict,verbose_name='所在城市',on_delete=models.CASCADE)add_time=models.DateTimeField(default=datetime.now)classMeta:verbose_name='课程机构'verbose_name_plural=verbose_name(2)CityDict
classCityDict(models.Model):name=models.CharField('城市',max_length=20)desc=models.CharField('描述',max_length=200)add_time=models.DateTimeField(default=datetime.now)classMeta:verbose_name='城市'verbose_name_plural=verbose_name(3)Teacher
classTeacher(models.Model):org=models.ForeignKey(CourseOrg,verbose_name='所属机构',on_delete=models.CASCADE)name=models.CharField('教师名',max_length=50)work_years=models.IntegerField('工作年限',default=0)work_company=models.CharField('就职公司',max_length=50)work_position=models.CharField('公司职位',max_length=50)points=models.CharField('教学特点',max_length=50)click_nums=models.IntegerField('点击数',default=0)fav_nums=models.IntegerField('收藏数',default=0)add_time=models.DateTimeField(default=datetime.now)classMeta:verbose_name='教师'verbose_name_plural=verbose_namedef__str__(self):return"[{0}]的教师:{1}".format(self.org,self.name)2.4.operation总共五张表
(1)UserAsk
user字段,默认0代表消息是发给所有用户,而不是某个单独的用户;可以通过user.id发给特定用户消息
INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','users','course','organization','operation',]迁移到数据库
pythonmanage.pymakemigrationspythonmanage.pymigrate2.5.把四个app放到一个文件夹创建package:apps
把之前的四个app全部剪切到apps包里面
不要选“Searchforreferences”
去掉searchfor的勾选。拖进去之后会报错,说找不到那些import的模块了。
解决方案:右键Mark为sourceRoot。根目录下找不到的,会去apps下搜索。