日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第4章 需求分析和model设计

發布時間:2024/1/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第4章 需求分析和model设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

慕課網《強力django+殺手級xadmin 打造上線標準的在線教育平臺》 學習筆記


本章主要內容:

  • django app的設計
  • 各個app models的設計
  • 數據表生成與修改

django app的設計

安裝環境python27下

  • 建立虛擬環境
mkvirtualenv mxonline pip install django==1.9.8 pip install mysql-python
  • 安裝失敗時,可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下載適合版本的whl包,然后在pip install packageName.whl來安裝

  • 配置settings中的DATABASES

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
  • 訪問

設計USER APP的model

  • 新建users app,然后設計user類
  • 由于django自帶的user類的字段不能滿足我們的需求,所以需要擴展
  • 擴展django user的方法有幾種:

    • 繼承AbstractUser
    • 新建類profile然后用外鍵指向user
  • 這里使用繼承AbstractUser的方法擴展

from django.db import models from django.contrib.auth.models import AbstractUserclass 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_namedef __unicode__(self):return self.username
  • 注冊在settings中APP,并且需要為AUTH_USER_MODEL賦值
AUTH_USER_MODEL="users.UserProfile"

各個app models的設計

  • 可能出現的問題

  • 解決該問題的方法主要是:分層設計

  • 把用戶的操作(評論,收藏等)獨立出來,放到另一個單獨的app中

  • users中添加另外兩個比較獨立的model:驗證碼和輪播圖

  • 郵箱驗證碼

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"發送時間", default=datetime.now)class Meta:verbose_name = u"郵箱驗證碼"verbose_name_plural = verbose_namedef __unicode__(self):return '{0}({1})'.format(self.code, self.email)
  • 輪播圖
class Banner(models.Model):title = models.CharField(max_length=100, verbose_name=u"標題")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

設計課程的app

startapp courses
  • 觀察界面

  • 設計數據庫表

  • PEP8 編程規范

    • 中文翻譯:https://my.oschina.net/u/1433482/blog/464444?p=1
    • 官方文檔:https://www.python.org/dev/peps/pep-0008/

    • 兩個類之間空兩行

  • Course類

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"學習時長(分鐘數)")students = models.IntegerField(default=0, verbose_name=u'學習人數')fav_nums = models.IntegerField(default=0, verbose_name=u'收藏人數')image = models.ImageField(upload_to="courses/%Y/%m", verbose_name=u"封面圖", max_length=100)click_nums = models.IntegerField(default=0, verbose_name=u"點擊數")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")class Meta:verbose_name = u"課程"verbose_name_plural = verbose_namedef __unicode__(self):return self.name
  • Lesson 章節
class Lesson(models.Model):course = models.ForeignKey(Course, verbose_name=u"課程")name = models.CharField(max_length=100, verbose_name=u"章節名")learn_times = models.IntegerField(default=0, verbose_name=u"學習時長(分鐘數)")add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")class Meta:verbose_name = u"章節"verbose_name_plural = verbose_namedef __unicode__(self):return self.name
  • Video 視頻
class Video(models.Model):lesson = models.ForeignKey(Lesson, verbose_name=u"章節")name = models.CharField(max_length=100, verbose_name=u"視頻名")learn_times = models.IntegerField(default=0, verbose_name=u"學習時長(分鐘數)")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_namedef __unicode__(self):return self.name
  • CourseResource 課程資源
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的設計

python manage.py startapp organization
  • 觀察界面

  • models設計

  • 城市信息 和 課程機構信息
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_namedef __unicode__(self):return self.nameclass CourseOrg(models.Model):name = models.CharField(max_length=50, verbose_name=u"機構名稱")desc = UEditorField(verbose_name=u"機構描述",width=900, height=300, imagePath="org/ueditor/",filePath="org/ueditor/", default='')tag = models.CharField(default="全國知名", max_length=10, verbose_name=u"機構標簽")category = models.CharField(default="pxjg", verbose_name=u"機構類別", max_length=20, choices=(("pxjg","培訓機構"),("gr","個人"),("gx","高校")))click_nums = models.IntegerField(default=0, verbose_name=u"點擊數")fav_nums = models.IntegerField(default=0, verbose_name=u"收藏數")image = models.ImageField(upload_to="org/%Y/%m", verbose_name=u"logo", max_length=100)address = models.CharField(max_length=150, verbose_name=u"機構地址")city = models.ForeignKey(CityDict, verbose_name=u"所在城市")students = models.IntegerField(default=0, verbose_name=u"學習人數")course_nums = models.IntegerField(default=0, verbose_name=u"課程數")add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = u"課程機構"verbose_name_plural = verbose_name
  • 講師
class Teacher(models.Model):org = models.ForeignKey(CourseOrg, verbose_name=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"教學特點")click_nums = models.IntegerField(default=0, verbose_name=u"點擊數")fav_nums = models.IntegerField(default=0, verbose_name=u"收藏數")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_namedef __unicode__(self):return self.namedef get_course_nums(self):return self.course_set.all().count()

用戶操作operation的model設計

  • 代碼
# _*_ encoding:utf-8 _*_ from __future__ import unicode_literalsfrom datetime import datetimefrom django.db import modelsfrom users.models import UserProfile from courses.models import Courseclass UserAsk(models.Model):name = models.CharField(max_length=20, verbose_name=u"姓名")mobile = models.CharField(max_length=11, verbose_name=u"手機")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_nameclass 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_nameclass UserFavorite(models.Model):user = models.ForeignKey(UserProfile, verbose_name=u"用戶")fav_id = models.IntegerField(default=0, verbose_name=u"數據id")fav_type = models.IntegerField(choices=((1,"課程"),(2,"課程機構"),(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_nameclass UserMessage(models.Model):user = models.IntegerField(default=0, verbose_name=u"接收用戶")message = models.CharField(max_length=500, verbose_name=u"消息內容")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_nameclass 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'))

總結本章主要內容

總結

以上是生活随笔為你收集整理的第4章 需求分析和model设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。