浅谈Python之Django(二)

 更新时间:2021年10月21日 09:16:14   作者:z-victor  
这篇文章主要介绍了Python3中的Django,小编觉得这篇文章写的还不错,需要的朋友们下面随着小编来一起学习学习吧,希望能够给你带来帮助

django设计

user-用户管理
curser-课程管理
organization-机构和教师管理

数据表生成与修改各APP models设计

users models 设计

修改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"标题")
    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 设计

修改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"学习时长")
    students = models.IntegerField(default=0,verbose_name=u"学习人数")
    fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人数")
    image = models.ImageField(max_length=100,verbose_name="封面图片",upload_to="courses/%Y/%m")
    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_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"章节名")
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
    class Meta:
        verbose_name = u"章节"
        verbose_name_plural = verbose_name
class Video(models.Model):
    lesson = models.ForeignKey(Lesson,verbose_name=u"章节",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后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:

TypeError: init() missing 1 required positional argument: ‘on_delete'

涉及到外键都需要改成

course = models.ForeignKey(Course,verbose_name=u"课程",on_delete=models.CASCADE)

在这里插入图片描述

organization models 设计

修改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"机构名称")
    desc = models.TextField(verbose_name=u"机构描述")
    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"封面图",max_length=100)
    address = models.CharField(max_length=150,verbose_name=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"课程机构"
        verbose_name_plural = verbose_name
class Teacher(models.Model):
    org = models.ForeignKey(CourseOrg,verbose_name=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"教学特点")
    click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
    fav_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_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 设计

# _*_ 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"数据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.ForeignKey(UserProfile, verbose_name=u"接收用户",on_delete=models.CASCADE)    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"用户",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"数据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_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"消息内容")
    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统一放到apps包下

因为app太多,不好管理,所以统一放到apps目录下进行管理

将app路径写入到配置文件setting.py中,防止包导入失败

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
生成数据表

在这里插入图片描述

> 运行python manage.py runserver 0.0.0.0:9000

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 使用pickle存储数据dump 和 load实例讲解

    使用pickle存储数据dump 和 load实例讲解

    今天小编就为大家分享一篇使用pickle存储数据dump 和 load实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • cProfile Python性能分析工具使用详解

    cProfile Python性能分析工具使用详解

    这篇文章主要介绍了cProfile Python性能分析工具使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python OpenCV 实现高斯滤波详解

    python OpenCV 实现高斯滤波详解

    这篇文章主要介绍了Python+OpenCV 实现高斯滤波的过程,关于高斯滤波的解释,它是一种线性平滑滤波,适用于消除高斯噪声,具体实现过程跟随小编一起看看吧
    2021-10-10
  • Python判断一个list中是否包含另一个list全部元素的方法分析

    Python判断一个list中是否包含另一个list全部元素的方法分析

    这篇文章主要介绍了Python判断一个list中是否包含另一个list全部元素的方法,结合实例形式对比分析了Python针对列表list元素包含关系的相关转换、判断操作技巧,需要的朋友可以参考下
    2018-12-12
  • Python3 XML 获取雅虎天气的实现方法

    Python3 XML 获取雅虎天气的实现方法

    下面小编就为大家分享一篇Python3 XML 获取雅虎天气的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • python如何拆分含有多种分隔符的字符串

    python如何拆分含有多种分隔符的字符串

    这篇文章主要为大家详细介绍了python如何拆分含有多种分隔符的字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • pandas中Series的代码实例解析

    pandas中Series的代码实例解析

    这篇文章主要介绍了pandas中Series的代码实例解析,Series序列,是一种一维的结构,类似于一维列表和ndarray中的一维数组,但是功能比他们要更为强大,Series由两部分组成:索引index和数值values,需要的朋友可以参考下
    2023-07-07
  • 详解pycharm的python包opencv(cv2)无代码提示问题的解决

    详解pycharm的python包opencv(cv2)无代码提示问题的解决

    这篇文章主要介绍了详解pycharm的python包opencv(cv2)无代码提示问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 发工资啦!教你用Python实现邮箱自动群发工资条

    发工资啦!教你用Python实现邮箱自动群发工资条

    这篇文章主要介绍了发工资啦!教你用Python实现邮箱自动群发工资条,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 基于Python快速处理PDF表格数据

    基于Python快速处理PDF表格数据

    这篇文章主要介绍了基于Python快速处理PDF表格数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论