基本的:

models.py

####################################以下都是抽屉的代码####################################
from django.db import models
# 记录用户注册的次数
class SendMsg(models.Model):
nid = models.AutoField(primary_key=True) # 自定义id名为nid,默认id名是id【固定格式】
email = models.CharField(max_length=32, unique=True)
code = models.CharField(max_length=6)
ctime = models.DateTimeField()
times = models.IntegerField(default=0) # 新闻类型
class NewsType(models.Model):
caption = models.CharField(max_length=16) # 抽屉的用户表设计
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=32)
email = models.CharField(max_length=32, unique=True)
ctime = models.DateTimeField() # 新闻表
class News(models.Model):
# 可以自己创建id,AutoField且primary_key = True【默认id=id】
title = models.CharField(max_length=64) # 标题
summary = models.CharField(max_length=128, null=True) # [内容,可为空简介]
url = models.URLField(null=True)
ctime = models.DateTimeField(auto_now_add=True)
# 下面2个user效果同,只是写法不同
# user = models.ForeignKey('UserInfo', on_delete=True, to_field='nid') # 跟UserInfo的nid进行关联
user = models.ForeignKey(to="UserInfo", to_field='nid', related_name='n', on_delete=True) # 跟UserInfo表关联
nt = models.ForeignKey(to='NewsType', to_field='id', related_name='tn', on_delete=True) # 关联NewsType表,关联默认的id
# 引用下面一行代码,就不需要下面的Favor表了,2个一个效果【这里采用点赞表实现,所以注释了】
# favor = models.ManyToManyField(to='UserInfo') # 默认关联的就是主键
favor_count = models.IntegerField(default=0) # 每点赞一次就增加1,同时给顶踩表添加一条数据
comment_count = models.IntegerField(default=0) # 每评论一次就增加1,同时给评论表添加一条数据 # 点赞表
class Favor(models.Model):
user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
news = models.ForeignKey(to='News', to_field='id', on_delete=True) # 评论表
class Comment(models.Model):
news = models.ForeignKey(to='News', to_field='id', on_delete=True)
user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
content = models.CharField(max_length=150)
ctime = models.DateTimeField(auto_now_add=True)
device = models.CharField(max_length=16, null=True) # 顶踩表:记录你顶过那个用户的哪条新闻,踩过哪个用户的哪条新闻

高级的:

这里使用many2many实现news和Useinfo的多对多的关系

我们在News里面是用来favor_count和comment_count来实现页面显示的点赞个数和评论个数的统计,后续页面有数据过来的时候,我们给favor_count和comment_count加1,且插入数据在comment和favor表中。[虽然消耗了硬盘,但是提高了速度]

models.py

####################################以下都是抽屉的代码####################################
from django.db import models
# 记录用户注册的次数
class SendMsg(models.Model):
nid = models.AutoField(primary_key=True) # 自定义id名为nid,默认id名是id【固定格式】
email = models.CharField(max_length=32, unique=True)
code = models.CharField(max_length=6)
ctime = models.DateTimeField()
times = models.IntegerField(default=0) # 新闻类型
class NewsType(models.Model):
caption = models.CharField(max_length=16) # 抽屉的用户表设计
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=32)
email = models.CharField(max_length=32, unique=True)
ctime = models.DateTimeField() # 新闻表
class News(models.Model):
# 可以自己创建id,AutoField且primary_key = True【默认id=id】
title = models.CharField(max_length=64) # 标题
summary = models.CharField(max_length=128, null=True) # [内容,可为空简介]
url = models.URLField(null=True)
ctime = models.DateTimeField(auto_now_add=True)
# 下面2个user效果同,只是写法不同
# user = models.ForeignKey('UserInfo', on_delete=True, to_field='nid') # 跟UserInfo的nid进行关联
user = models.ForeignKey(to="UserInfo", to_field='nid', related_name='n', on_delete=True) # 跟UserInfo表关联
nt = models.ForeignKey(to='NewsType', to_field='id', related_name='tn', on_delete=True) # 关联NewsType表,关联默认的id
# 引用下面一行代码,就不需要下面的Favor表了,2个一个效果【不采用点赞表Favor】
favor = models.ManyToManyField(to='UserInfo') # 默认关联的就是主键
favor_count = models.IntegerField(default=0) # 每点赞一次就增加1,同时给顶踩表添加一条数据
comment_count = models.IntegerField(default=0) # 每评论一次就增加1,同时给评论表添加一条数据 # 点赞表【这里采用manyTomany实现userInfo和News单独关系,所以注释了】
# class Favor(models.Model):
# user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
# news = models.ForeignKey(to='News', to_field='id', on_delete=True) # 评论表
class Comment(models.Model):
news = models.ForeignKey(to='News', to_field='id', on_delete=True)
user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
content = models.CharField(max_length=150)
ctime = models.DateTimeField(auto_now_add=True)
device = models.CharField(max_length=16, null=True) # 顶踩表:记录你顶过那个用户的哪条新闻,踩过哪个用户的哪条新闻

终极版:提升速度,增加功能

models.py

####################################以下都是抽屉的代码####################################
from django.db import models
# 记录用户注册的次数
class SendMsg(models.Model):
nid = models.AutoField(primary_key=True) # 自定义id名为nid,默认id名是id【固定格式】
email = models.CharField(max_length=32, unique=True)
code = models.CharField(max_length=6)
ctime = models.DateTimeField()
times = models.IntegerField(default=0) # 新闻类型
class NewsType(models.Model):
caption = models.CharField(max_length=16) # 抽屉的用户表设计
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=32)
email = models.CharField(max_length=32, unique=True)
ctime = models.DateTimeField() # 新闻表
class News(models.Model):
# 可以自己创建id,AutoField且primary_key = True【默认id=id】
title = models.CharField(max_length=64) # 标题
summary = models.CharField(max_length=128, null=True) # [内容,可为空简介]
url = models.URLField(null=True)
ctime = models.DateTimeField(auto_now_add=True)
# 下面2个user效果同,只是写法不同
# user = models.ForeignKey('UserInfo', on_delete=True, to_field='nid') # 跟UserInfo的nid进行关联
user = models.ForeignKey(to="UserInfo", to_field='nid', related_name='n', on_delete=True) # 跟UserInfo表关联
# nt = models.ForeignKey(to='NewsType', to_field='id', related_name='tn', on_delete=True) # 关联NewsType表,关联默认的id
# 因为内容固定,所以这里直接采用列表的形式了
news_type_choices = [
(1, '42区'),
(2, '段子'),
(3, '图片'),
(4, '挨踢1024'),
(5, '你问我答'),
]
# DjangoAdmin里面会渲染为一个下拉框,这里需要我们自己去写下拉框了
nt = models.IntegerField(choices=news_type_choices)
# 引用下面一行代码,就不需要下面的Favor表了,2个一个效果
favor = models.ManyToManyField(to='UserInfo') # 默认关联的就是主键
favor_count = models.IntegerField(default=0) # 每点赞一次就增加1,同时给顶踩表添加一条数据
comment_count = models.IntegerField(default=0) # 每评论一次就增加1,同时给评论表添加一条数据 # 点赞表 【这里我们采用many2many实现多对多的关系,此表暂时不用】
# class Favor(models.Model):
# user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
# news = models.ForeignKey(to='News', to_field='id', on_delete=True) # 评论表
class Comment(models.Model):
news = models.ForeignKey(to='News', to_field='id', on_delete=True)
user = models.ForeignKey(to='UserInfo', to_field='nid', on_delete=True)
content = models.CharField(max_length=150)
ctime = models.DateTimeField(auto_now_add=True)
device = models.CharField(max_length=16, null=True)
# 这里要求父评论只能是数字且是Comment里面的自增ID
# 要求也能实现反向查找【此时可认为是2个Comment表,但需要添加releat_name,否则就易混乱】
parent_comment = models.ForeignKey(to="Comment", null=True, on_delete=True, related_name='pc') # 顶踩表:记录你顶过那个用户的哪条新闻,踩过哪个用户的哪条新闻

Python学习---抽屉框架分析[数据库设计分析]180313的更多相关文章

  1. Python学习---抽屉框架分析[小评论分析]0315

    注: 此处的小评论涉及数据库操作 初级小评论代码 settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS = (o ...

  2. Python学习---抽屉框架分析[ORM操作]180314

    Django ORM操作     1. 字段操作         class User(model.Model);             u=字段        用处:            1 . ...

  3. Python学习---抽屉框架分析[点赞功能/文件上传分析]0317

    点赞功能分析 前台传递过来新闻id[new_id]和session[session内有用户ID和用户之间的信息]到后台 后台News数据库内用户和新闻是多对多的关系,查看第三张表中的内容,判读用户Id ...

  4. Python学习---抽屉框架分析[点赞功能分析]

    实际上就是多了一个隐藏的span标签,内容是+1,配合setInterval实现的动态效果 settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] ...

  5. python学习-- Django根据现有数据库,自动生成models模型文件

    Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自 ...

  6. [TimLinux] Python学习内容框架

    以下内容主体来自<Python学习手册第四版>,大致整理出的方向 1. 第一部分:使用入门 介绍Python语法之前,先对Python的的各个方面进行一个比较宽广的介绍,包含对Python ...

  7. [Python] 学习笔记之MySQL数据库操作

    1 Python标准数据库接口DB-API介绍 Python标准数据库接口为 Python DB-API,它为开发人员提供了数据库应用编程接口.Python DB-API支持很多种的数据库,你可以选择 ...

  8. Python学习(十七)—— 数据库(二)

    转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一. 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中, ...

  9. Python学习——web框架

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用p ...

随机推荐

  1. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  2. Oracle 创建表空间和用户

    创建用户: 建立表空间和用户的步骤: 用户 建立:create user 用户名 identified by "密码"; 授权:grant create session to 用户 ...

  3. java中,方法可以访问他的类对象的任何私有特性

    java中,方法可以访问他的类对象的任何私有特性 读一本书(Core Java for the Impatient)时,发现这个注意,以前的时候没有在意,今天仔细想想发现记忆不深刻.记录一下 下面代码 ...

  4. STL中deque 解析

    一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是 ...

  5. maven备忘

    maven常见命令 mvn clean mvn compile mvn package mvn clean compile package mvn -Djetty.port= jetty:run mv ...

  6. Vue组件库

    滴滴cube-ui https://didi.github.io/cube-ui/#/zh-CN/docs/quick-start 有赞开源Vant(适合做商城) https://tech.youza ...

  7. developer.android.google.cn

    Android Studio官方 Android IDE https://developer.android.google.cn/studio/index.html 探索 Android Studio ...

  8. 对.net事件的看法

    对.net事件的看法 一.事件的本质 事件是软件系统里的两个子系统之间,或者两个模块之间,或者两个对象之间发送消息,并处理消息的过程.在面向对象的世界里,就可以统一认为是两个对象之间的行为. 两个对象 ...

  9. [javaSE] 网络编程(URL)

    获取URL对象,new出来,构造参数:String的路径 调用URL对象的getProtocal()方法,获取协议 调用URL对象的getHost()方法,获取主机 调用URL对象的getPath() ...

  10. 撩课-Python-每天5道面试题-第4天

    一. for循环和while循环中的else代表什么意思? 当for循环和while循环顺利的遍历完成时, 就会执行else分支 如果循环过程中, 碰到continue, 只要没有打断循环, 就会继续 ...