浅谈Python之Django(二)

目录
  • django设计
  • 数据表生成与修改各APP models设计
    • users models 设计
    • course models 设计
    • organization models 设计
  • operation models 设计
  • 总结

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

总结

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

(0)

相关推荐

  • 一篇文章带你自学python Django

    目录 1. Django简介 Django是什么? Django前景 Django框架核心 2. 设计模式 MVT模式 3. 开发环境简介 4.创建虚拟环境 4.1.首先安装管理环境的包以及虚拟环境包 4.1.1 安装环境管理包virtualenvwrapper 4.1.2 安装虚拟环境包virtualenv 4.1.3 查看pip list,检查是否安装成功 4.2 对虚拟环境的操作 4.2.1 创建虚拟环境 4.2.2 查看虚拟环境中的包,并安装Django包 4.2.3 退出虚拟环境 4.

  • 基于python + django + whoosh + jieba 分词器实现站内检索功能

    基于 python django 源码 前期准备 安装库: pip install django-haystack pip install whoosh pip install jieba 如果pip 安装超时,可配置pip国内源下载,如下: pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com <安装的库> pip install -i http://mirrors.al

  • 浅谈Python之Django

    目录 工具版本 创建工程djangostart 创建项目message 创建一些辅助目录 连接数据库(保证自己的数据库已启动) 生成数据表 总结 工具版本 python版本:3.8 django版本:2.0.0 mysql版本: 5.5.53 pip3 创建工程djangostart Django-admin startproject djangostart 创建项目message 从day17目录下执行命令 cd djangostart Django-admin startapp messag

  • python Django的显示个人信息详解

    目录 用命令创建Django项目 1.将磁盘切换为D盘 2.在D盘的路径下创建Django项目 3.最后显示新建index文件夹 启动项目 1.输入以下命令启动项目 2.在浏览器中输入http://127.0.0.1:8001/,就可以看到运行结果 3.数据迁移 4.添加app 5.添加index的路径 6.新建一个urls.py文件 7.编写一个视图返回函数 8.在新建的urls文件:里面写入一下代码 9.最后显示结果 10.新建一个templates文件存放welcome.html 11.编

  • Python Django模型详解

    目录 Django模型 字段类型 字段类型的参数 外键 总结 Django模型 Django的模型定义在models.py文件中.模型是MVT中的M,也相当于MVC中的M. 在Django中,模型必须继承自Model类.例如: from django.db import models # Create your models here. class BookInfo(models.Model): # 一个模型类就会对应生成数据库中的一张表 """书籍模型""

  • python中通过Django捕获所有异常的处理

    目录 概述 Django 统一异常处理 统一异常处理具体设计 自定义异常模块 自定义状态码枚举类 响应信息统一结果的封装 完善统一异常处理逻辑 应用场景 注册校验 源代码 尾语 概述 在项目中统一异常处理,可以防止代码中有未捕获的异常出现.本文介绍如何在 Django 项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录. Django 统一异常处理 在 Django 项目中可以自定义 中间件类 继承 django.middleware.common 下的 Middleware

  • 浅谈Python之Django(二)

    目录 django设计 数据表生成与修改各APP models设计 users models 设计 course models 设计 organization models 设计 operation models 设计 总结 django设计 user-用户管理 curser-课程管理 organization-机构和教师管理 数据表生成与修改各APP models设计 users models 设计 修改users目录下的models # _*_ encoding:utf-8 _*_ from

  • 浅谈Python之Django(三)

    目录 django-admin基本介绍 激活django-admin 创建访问django-admin的超级用户 访问django-admin 修改django-admin为中文 修改django-admin为中国时区 后台放出users可以对用户信息进行修改 总结 django-admin基本介绍 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 配置文件settings.py 中的INSTALLED_APPS

  • 浅谈Python之Django(四)

    目录 1.pip3 install xadmin 2.解决方案 3. 修改配置文件setting.py中的INSTALLED_APPS 4.修改urls中的路由 5.访问 6.设置显示的字段与搜索的字段 7.__str __ 8.全局配置 总结 1.pip3 install xadmin 因为我是django2.0,直接使用命令一直报错,如下图 2.解决方案 下载xadmin源包 下载地址:https://github.com/Zjvngvn/xadmin pip3 install 源码的地址(

  • 浅谈Python的Django框架中的缓存控制

    关于缓存剩下的问题是数据的隐私性以及在级联缓存中数据应该在何处储存的问题. 通常用户将会面对两种缓存: 他或她自己的浏览器缓存(私有缓存)以及他或她的提供者缓存(公共缓存). 公共缓存由多个用户使用,而受其他某人的控制. 这就产生了你不想遇到的敏感数据的问题,比如说你的银行账号被存储在公众缓存中. 因此,Web 应用程序需要以某种方式告诉缓存那些数据是私有的,哪些是公共的. 解决方案是标示出某个页面缓存应当是私有的. 要在 Django 中完成此项工作,可使用 cache_control 视图修

  • 浅谈python中copy和deepcopy中的区别

    在下是个编程爱好者,最近将魔爪伸向了Python编程.....遇到copy和deepcopy感到很困惑,现在针对这两个方法进行区分,一种是浅复制(copy),一种是深度复制(deepcopy). 首先说一下deepcopy,所谓的深度复制,在这里我理解的是完全复制然后变成一个新的对象,复制的对象和被复制的对象没有任何关系,彼此之间无论怎么改变都相互不影响. 然后说一下copy,在这里我分为两类来说,一种是字典数据类型的copy函数,一种是copy包的copy函数. 一.字典数据类型的copy函数

  • 浅谈Python基础之I/O模型

    一.I/O模型 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别? 这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blockin

  • 浅谈python中的数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合, 6.布尔类型 7.无穷的整数精度 8.各种数字内置函数及模块. 基本数字类型 python中提供了两种基本类型:整数(正整数金额负整数)和浮点数(注:带有小数部分的数字),其中python中我们可以使用多种进制的整数.并且整数可以用有无穷精度. 整数的表现形式以十进制数字字符串写法出现,浮点数带

  • 浅谈python装饰器探究与参数的领取

    首先上原文: 现在,假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 本质上,decorator就是一个返回函数的高阶函数. Decorator本质是高阶函数? 不信邪的我试了下.. def g(): print("这里是G") return "G" @g def f(): print("这里是F&qu

  • 浅谈python数据类型及类型转换

    Python中核心的数据类型有哪些? 变量(数字.字符串.元组.列表.字典) 什么是数据的不可变性?哪些数据类型具有不可变性 数据的不可变是指数据不可更改,比如: a = ("abc",123) #定义元组 a[0]=234 #把第一位更改为345 print(a) #打印时会报错 不可变:数字.字符.元组 可变:列表和字典 Python中常见数据类型 赋值 counter = 100 miles = 1000 name = "nan" print(counter,

随机推荐