慕課網(wǎng)《強(qiáng)力django+殺手級xadmin 打造上線標(biāo)準(zhǔn)的在線教育平臺》 學(xué)習(xí)筆記
本章主要內(nèi)容:
- django app的設(shè)計
- 各個app models的設(shè)計
- 數(shù)據(jù)表生成與修改
django app的設(shè)計
安裝環(huán)境python27下
mkvirtualenv mxonline
pip
install django==
1.9.
8
pip
install mysql-python
DATABASES = {
'default': {
'ENGINE':
'django.db.backends.mysql',
'NAME':
'mxonline',
'USER':
'mxonline',
'PASSWORD':
'mxonline',
'HOST':
"127.0.0.1"}
}
python manage
.py makemigrations
python manage
.py migrate
設(shè)計USER APP的model
from django.db
import models
from django.contrib.auth.models
import AbstractUser
class UserProfile(AbstractUser):nick_name = models.CharField(max_length=
50, verbose_name=
u"昵稱", default=
"")birday = models.DateField(verbose_name=
u"生日", null=
True, blank=
True)gender = models.CharField(max_length=
6, choices=((
"male",
u"男"),(
"female",
"女")), default=
"female")address = models.CharField(max_length=
100, default=
u"")mobile = models.CharField(max_length=
11, null=
True, blank=
True)image = models.ImageField(upload_to=
"image/%Y/%m",default=
u"image/default.png", max_length=
100)
class Meta:verbose_name =
"用戶信息"verbose_name_plural = verbose_name
def __unicode__(self):return self.username
- 注冊在settings中APP,并且需要為AUTH_USER_MODEL賦值
AUTH_USER_MODEL="users.UserProfile"
各個app models的設(shè)計
可能出現(xiàn)的問題
解決該問題的方法主要是:分層設(shè)計
- 把用戶的操作(評論,收藏等)獨立出來,放到另一個單獨的app中
class EmailVerifyRecord(models.Model):code = models.CharField(max_length=
20, verbose_name=
u"驗證碼")email = models.EmailField(max_length=
50, verbose_name=
u"郵箱")send_type = models.CharField(verbose_name=
u"驗證碼類型", choices=((
"register",
u"注冊"),(
"forget",
u"找回密碼"), (
"update_email",
u"修改郵箱")), max_length=
30)send_time = models.DateTimeField(verbose_name=
u"發(fā)送時間", default=datetime.now)
class Meta:verbose_name =
u"郵箱驗證碼"verbose_name_plural = verbose_name
def __unicode__(self):return '{0}({1})'.format(self.code, self.email)
class Banner(models.Model):title = models.CharField(max_length=
100, verbose_name=
u"標(biāo)題")image = models.ImageField(upload_to=
"banner/%Y/%m", verbose_name=
u"輪播圖", max_length=
100)url = models.URLField(max_length=
200, verbose_name=
u"訪問地址")index = models.IntegerField(default=
100, verbose_name=
u"順序")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"輪播圖"verbose_name_plural = verbose_name
設(shè)計課程的app
startapp courses
class Course(models.Model):name = models.CharField(max_length=
50, verbose_name=
u"課程名")desc = models.CharField(max_length=
300, verbose_name=
u"課程描述")detail = UEditorField(verbose_name=
u"課程詳情",width=
600, height=
300, imagePath=
"courses/ueditor/",filePath=
"courses/ueditor/", default=
'')is_banner = models.BooleanField(default=
False, verbose_name=
u"是否輪播")degree = models.CharField(verbose_name=
u"難度", choices=((
"cj",
"初級"), (
"zj",
"中級"), (
"gj",
"高級")), max_length=
2)learn_times = models.IntegerField(default=
0, verbose_name=
u"學(xué)習(xí)時長(分鐘數(shù))")students = models.IntegerField(default=
0, verbose_name=
u'學(xué)習(xí)人數(shù)')fav_nums = models.IntegerField(default=
0, verbose_name=
u'收藏人數(shù)')image = models.ImageField(upload_to=
"courses/%Y/%m", verbose_name=
u"封面圖", max_length=
100)click_nums = models.IntegerField(default=
0, verbose_name=
u"點擊數(shù)")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"課程"verbose_name_plural = verbose_name
def __unicode__(self):return self.name
class Lesson(models.Model):course = models.ForeignKey(Course, verbose_name=
u"課程")name = models.CharField(max_length=
100, verbose_name=
u"章節(jié)名")learn_times = models.IntegerField(default=
0, verbose_name=
u"學(xué)習(xí)時長(分鐘數(shù))")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"章節(jié)"verbose_name_plural = verbose_name
def __unicode__(self):return self.name
class Video(models.Model):lesson = models.ForeignKey(Lesson, verbose_name=
u"章節(jié)")name = models.CharField(max_length=
100, verbose_name=
u"視頻名")learn_times = models.IntegerField(default=
0, verbose_name=
u"學(xué)習(xí)時長(分鐘數(shù))")url = models.CharField(max_length=
200, default=
"", verbose_name=
u"訪問地址")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"視頻"verbose_name_plural = verbose_name
def __unicode__(self):return self.name
class CourseResource(models.Model):course = models.ForeignKey(Course, verbose_name=
u"課程")name = models.CharField(max_length=
100, verbose_name=
u"名稱")download = models.FileField(upload_to=
"course/resource/%Y/%m", verbose_name=
u"資源文件", max_length=
100)add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"課程資源"verbose_name_plural = verbose_name
organization的設(shè)計
python manage
.py startapp organization
class CityDict(models.Model):name = models.CharField(max_length=
20, verbose_name=
u"城市")desc = models.CharField(max_length=
200, verbose_name=
u"描述")add_time = models.DateTimeField(default=datetime.now)
class Meta:verbose_name =
u"城市"verbose_name_plural = verbose_name
def __unicode__(self):return self.name
class CourseOrg(models.Model):name = models.CharField(max_length=
50, verbose_name=
u"機(jī)構(gòu)名稱")desc = UEditorField(verbose_name=
u"機(jī)構(gòu)描述",width=
900, height=
300, imagePath=
"org/ueditor/",filePath=
"org/ueditor/", default=
'')tag = models.CharField(default=
"全國知名", max_length=
10, verbose_name=
u"機(jī)構(gòu)標(biāo)簽")category = models.CharField(default=
"pxjg", verbose_name=
u"機(jī)構(gòu)類別", max_length=
20, choices=((
"pxjg",
"培訓(xùn)機(jī)構(gòu)"),(
"gr",
"個人"),(
"gx",
"高校")))click_nums = models.IntegerField(default=
0, verbose_name=
u"點擊數(shù)")fav_nums = models.IntegerField(default=
0, verbose_name=
u"收藏數(shù)")image = models.ImageField(upload_to=
"org/%Y/%m", verbose_name=
u"logo", max_length=
100)address = models.CharField(max_length=
150, verbose_name=
u"機(jī)構(gòu)地址")city = models.ForeignKey(CityDict, verbose_name=
u"所在城市")students = models.IntegerField(default=
0, verbose_name=
u"學(xué)習(xí)人數(shù)")course_nums = models.IntegerField(default=
0, verbose_name=
u"課程數(shù)")add_time = models.DateTimeField(default=datetime.now)
class Meta:verbose_name =
u"課程機(jī)構(gòu)"verbose_name_plural = verbose_name
class Teacher(models.Model):org = models.ForeignKey(CourseOrg, verbose_name=
u"所屬機(jī)構(gòu)")name = models.CharField(max_length=
50, verbose_name=
u"教師名")work_years = models.IntegerField(default=
0, verbose_name=
u"工作年限")work_company = models.CharField(max_length=
50, verbose_name=
u"就職公司")work_position = models.CharField(max_length=
50, verbose_name=
u"公司職位")points = models.CharField(max_length=
50, verbose_name=
u"教學(xué)特點")click_nums = models.IntegerField(default=
0, verbose_name=
u"點擊數(shù)")fav_nums = models.IntegerField(default=
0, verbose_name=
u"收藏數(shù)")age = models.IntegerField(default=
18, verbose_name=
u"年齡")image = models.ImageField(default=
'', upload_to=
"teacher/%Y/%m", verbose_name=
u"頭像", max_length=
100)add_time = models.DateTimeField(default=datetime.now)
class Meta:verbose_name =
u"教師"verbose_name_plural = verbose_name
def __unicode__(self):return self.name
def get_course_nums(self):return self.course_set.all().count()
用戶操作operation的model設(shè)計
from __future__
import unicode_literals
from datetime
import datetime
from django.db
import models
from users.models
import UserProfile
from courses.models
import Course
class UserAsk(models.Model):name = models.CharField(max_length=
20, verbose_name=
u"姓名")mobile = models.CharField(max_length=
11, verbose_name=
u"手機(jī)")course_name = models.CharField(max_length=
50, verbose_name=
u"課程名")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"用戶咨詢"verbose_name_plural = verbose_name
class CourseComments(models.Model):"課程評論"user = models.ForeignKey(UserProfile, verbose_name=
u"用戶")course = models.ForeignKey(Course, verbose_name=
u"課程")comments = models.CharField(max_length=
200, verbose_name=
u"評論")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"課程評論"verbose_name_plural = verbose_name
class UserFavorite(models.Model):user = models.ForeignKey(UserProfile, verbose_name=
u"用戶")fav_id = models.IntegerField(default=
0, verbose_name=
u"數(shù)據(jù)id")fav_type = models.IntegerField(choices=((
1,
"課程"),(
2,
"課程機(jī)構(gòu)"),(
3,
"講師")), default=
1, verbose_name=
u"收藏類型")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"用戶收藏"verbose_name_plural = verbose_name
class UserMessage(models.Model):user = models.IntegerField(default=
0, verbose_name=
u"接收用戶")message = models.CharField(max_length=
500, verbose_name=
u"消息內(nèi)容")has_read = models.BooleanField(default=
False, verbose_name=
u"是否已讀")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"用戶消息"verbose_name_plural = verbose_name
class UserCourse(models.Model):user = models.ForeignKey(UserProfile, verbose_name=
u"用戶")course = models.ForeignKey(Course, verbose_name=
u"課程")add_time = models.DateTimeField(default=datetime.now, verbose_name=
u"添加時間")
class Meta:verbose_name =
u"用戶課程"verbose_name_plural = verbose_name
- 將所有的app都移動到apps目錄下,其他地方和索引不要改變,此時需要在settings下配置apps的路徑
import syssys.path.
insert(0, os.path.join(BASE_DIR, 'apps'))
總結(jié)本章主要內(nèi)容
總結(jié)
以上是生活随笔為你收集整理的第4章 需求分析和model设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。