淺談Python之Django(二)
django設(shè)計
user-用戶管理
curser-課程管理
organization-機構(gòu)和教師管理
數(shù)據(jù)表生成與修改各APP models設(shè)計
users models 設(shè)計
修改users目錄下的models
# _*_ encoding:utf-8 _*_
from __future__ import unicode_literals
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserProfile(AbstractUser):
# verbose_name:備注
# blank:是否可以為空
#
nick_name = models.CharField(max_length=50,verbose_name=u"昵稱",default="")
birthday = models.DateField(verbose_name=u"生日",blank=True)
gender = models.CharField(choices=(('male',u'男'),('female',u'女')),default="female",max_length=6)
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 = u"用戶信息"
verbose_name_plural = verbose_name
def __unicode__(self):
return self.username
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(max_length=10,choices=(("register",u"注冊"),("forget",u"找回密碼")),)
send_time = models.DateTimeField(default=datetime.now(),verbose_name=u"添加時間")
class Meta:
verbose_name = u"郵箱驗證碼"
verbose_name_plural = verbose_name
class Banner(models.Model):
title = models.CharField(max_length=100,verbose_name=u"標(biāo)題")
image = models.ImageField(max_length=100,upload_to="banner/%Y/%m",verbose_name=u"輪播圖")
url = models.URLField(max_length=100,verbose_name=u"訪問地址")
index = models.IntegerField(verbose_name=u"順序",default=100)
add_time = models.DateTimeField(default=datetime.now(),verbose_name=u"添加時間")
class Meta:
verbose_name = u"輪播圖"
verbose_name_plural = verbose_name
修改配置文件setting.py中的INSTALLED_APPS,將我們的app users加入,添加AUTH_USER_MODEL = “users.UserProfile”
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
]
AUTH_USER_MODEL = "users.UserProfile"
運行python manage.py runserver 0.0.0.0:9000



解決問題:
pip3 install Pillow(安裝Pillow包)

python manage.py makemigrations users
python manage.py migrate users

解決users.0001_initial,將配置文件中的INSTALLED_APPS中的django.contrib.admin注釋掉

course models 設(shè)計
修改course 目錄下的models
# _*_ encoding:utf-8 _*_
from __future__ import unicode_literals
from datetime import datetime
from django.db import models
# Create your models here.
class Course(models.Model):
name = models.CharField(max_length=50,verbose_name=u"課程名")
desc = models.CharField(max_length=300,verbose_name=u"課程描述")
detail = models.TextField(verbose_name=u"課程詳情")
degree = models.CharField(max_length=2,choices=(('cj','初級'),('zj','中級'),('gj','高級')))
learn_time = models.IntegerField(default=0,verbose_name=u"學(xué)習(xí)時長")
students = models.IntegerField(default=0,verbose_name=u"學(xué)習(xí)人數(shù)")
fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人數(shù)")
image = models.ImageField(max_length=100,verbose_name="封面圖片",upload_to="courses/%Y/%m")
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
class Lesson(models.Model):
course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)
name = models.CharField(max_length=100,verbose_name=u"章節(jié)名")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")
class Meta:
verbose_name = u"章節(jié)"
verbose_name_plural = verbose_name
class Video(models.Model):
lesson = models.ForeignKey(Lesson,verbose_name=u"章節(jié)",on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name=u"視頻名")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")
class Meta:
verbose_name = u"視頻"
verbose_name_plural = verbose_name
class CourseResource(models.Model):
course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE)
name = models.CharField(max_length=100, verbose_name=u"名稱")
download = models.FileField(upload_to="course/recourse/%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
修改配置文件setting.py中的INSTALLED_APPS,將我們的app course加入
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'course',
]
運行python manage.py runserver 0.0.0.0:9000

原因
在django2.0后,定義外鍵和一對一關(guān)系的時候需要加on_delete選項,此參數(shù)為了避免兩個表里的數(shù)據(jù)不一致問題,不然會報錯:
TypeError: init() missing 1 required positional argument: ‘on_delete'
涉及到外鍵都需要改成
course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)

organization models 設(shè)計
修改organization目錄下的models
# _*_ encoding:utf-8 _*_
from __future__ import unicode_literals
from datetime import datetime
from django.db import models
# Create your models here.
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, verbose_name=u"添加時間")
class Meta:
verbose_name = u"城市"
verbose_name_plural = verbose_name
class CourseOrg(models.Model):
name = models.CharField(max_length=50,verbose_name=u"機構(gòu)名稱")
desc = models.TextField(verbose_name=u"機構(gòu)描述")
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"封面圖",max_length=100)
address = models.CharField(max_length=150,verbose_name=u"機構(gòu)地址")
city = models.ForeignKey(CityDict,verbose_name=u"所在城市",on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")
class Meta:
verbose_name = u"課程機構(gòu)"
verbose_name_plural = verbose_name
class Teacher(models.Model):
org = models.ForeignKey(CourseOrg,verbose_name=u"所屬機構(gòu)",on_delete=models.CASCADE)
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ù)")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")
class Meta:
verbose_name = u"教師"
verbose_name_plural = verbose_name
修改配置文件setting.py中的INSTALLED_APPS,將我們的app organization加入
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'course',
'organization',
]
operation models 設(shè)計
# _*_ encoding:utf-8 _*_from __future__ import unicode_literalsfrom datetime import datetimefrom django.db import modelsfrom users.models import UserProfilefrom course.models import Course# Create your models here.class 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"用戶",on_delete=models.CASCADE) course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE) 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"用戶",on_delete=models.CASCADE) fav_id = models.IntegerField(default=0,verbose_name=u"數(shù)據(jù)id") fav_type = models.IntegerField(choices=((1,'課程'),(2,'課程機構(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_nameclass UserMessage(models.Model): user = models.ForeignKey(UserProfile, verbose_name=u"接收用戶",on_delete=models.CASCADE) 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_nameclass UserCourse(models.Model): user = models.ForeignKey(UserProfile, verbose_name=u"用戶",on_delete=models.CASCADE) course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE) add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間") class Meta: verbose_name = u"用戶課程" verbose_name_plural = verbose_name
修改配置文件setting.py中的INSTALLED_APPS,將我們的app operation加入
# _*_ encoding:utf-8 _*_
from __future__ import unicode_literals
from datetime import datetime
from django.db import models
from users.models import UserProfile
from course.models import Course
# Create your models here.
class 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_name
class CourseComments(models.Model):
# 課程評論
user = models.ForeignKey(UserProfile,verbose_name=u"用戶",on_delete=models.CASCADE)
course = models.ForeignKey(Course,verbose_name=u"課程",on_delete=models.CASCADE)
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"用戶",on_delete=models.CASCADE)
fav_id = models.IntegerField(default=0,verbose_name=u"數(shù)據(jù)id")
fav_type = models.IntegerField(choices=((1,'課程'),(2,'課程機構(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.ForeignKey(UserProfile, verbose_name=u"接收用戶",on_delete=models.CASCADE)
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"用戶",on_delete=models.CASCADE)
course = models.ForeignKey(Course, verbose_name=u"課程",on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加時間")
class Meta:
verbose_name = u"用戶課程"
verbose_name_plural = verbose_name
將4個app統(tǒng)一放到apps包下
因為app太多,不好管理,所以統(tǒng)一放到apps目錄下進行管理
將app路徑寫入到配置文件setting.py中,防止包導(dǎo)入失敗
import os import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,os.path.join(BASE_DIR,'apps'))

python manage.py makemigrations
python manage.py migrate
生成數(shù)據(jù)表

> 運行python manage.py runserver 0.0.0.0:9000

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
使用pickle存儲數(shù)據(jù)dump 和 load實例講解
今天小編就為大家分享一篇使用pickle存儲數(shù)據(jù)dump 和 load實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python判斷一個list中是否包含另一個list全部元素的方法分析
這篇文章主要介紹了Python判斷一個list中是否包含另一個list全部元素的方法,結(jié)合實例形式對比分析了Python針對列表list元素包含關(guān)系的相關(guān)轉(zhuǎn)換、判斷操作技巧,需要的朋友可以參考下2018-12-12
詳解pycharm的python包opencv(cv2)無代碼提示問題的解決
這篇文章主要介紹了詳解pycharm的python包opencv(cv2)無代碼提示問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
發(fā)工資啦!教你用Python實現(xiàn)郵箱自動群發(fā)工資條
這篇文章主要介紹了發(fā)工資啦!教你用Python實現(xiàn)郵箱自動群發(fā)工資條,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05

