首先我们要设计一下表结构:

UserInfo(用户信息表) --------》一对一    -----------》Blog(博客信息表)

UserInfo(用户信息表) ---------》一对多    -----------》Article UpDown(点赞表)

UserInfo(用户信息表) ---------》一对多    -----------》Article Comment(评论表)

UserInfo(用户信息表)----------》一对多    -----------》Article(文章)

Blog(博客信息表)    ----------------》 一对多   -----------》Category(个人博客文章分类表)

Blog(博客信息表)    ----------------》一对多   ------------》Tag(标签表)

Category(个人博客文章分类表)--》 一对多 -------------》Article(文章表)

Tag(标签表)  --------------------------》多对多  -------------》Article(文章表)

Article(文章表) ------------------------》一对一  -------------》ArticleDetail(文章详情表)

Article(文章表) ------------------------》一对多  --------------》Article UpDown(点赞表)

Article(文章表) ------------------------》一对多 ---------------》Article Comment(评论表)

from django.db import models# Create your models here.
from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):  #继承了Django框架自带的一张用户表,我们可以自定义原表没有的属性进行拓展"""用户信息表"""nid = models.AutoField(primary_key=True)phone = models.CharField(max_length=11, null=True, unique=True)avatar = models.FileField(upload_to="avatars/", default="avatars/default.png")blog = models.OneToOneField(to="Blog", to_field="nid", null=True)def __str__(self):return self.usernameclass Meta:verbose_name = "用户信息"verbose_name_plural = verbose_nameclass Blog(models.Model):"""博客信息"""nid = models.AutoField(primary_key=True)title = models.CharField(max_length=64)  # 个人博客标题theme = models.CharField(max_length=32)  # 博客主题def __str__(self):return self.titleclass Meta:verbose_name = "博客"verbose_name_plural = verbose_nameclass Category(models.Model):"""个人博客文章分类"""nid = models.AutoField(primary_key=True)title = models.CharField(max_length=32)  # 分类标题blog = models.ForeignKey(to="Blog", to_field="nid")  # 外键关联博客,一个博客站点可以有多个分类def __str__(self):return "{}-{}".format(self.blog.title, self.title)class Meta:verbose_name = "文章分类"verbose_name_plural = verbose_nameclass Tag(models.Model):"""标签"""nid = models.AutoField(primary_key=True)title = models.CharField(max_length=32)  # 标签名blog = models.ForeignKey(to="Blog", to_field="nid")  # 所属博客def __str__(self):return self.titleclass Meta:verbose_name = "标签"verbose_name_plural = verbose_nameclass Article(models.Model):"""文章"""nid = models.AutoField(primary_key=True)title = models.CharField(max_length=50)  # 文章标题desc = models.CharField(max_length=255)  # 文章描述create_time = models.DateTimeField(auto_now_add=True)  # 创建时间category = models.ForeignKey(to="Category", to_field="nid", null=True)user = models.ForeignKey(to="UserInfo", to_field="nid")tags = models.ManyToManyField(to="Tag",through="Article2Tag",through_fields=("article", "tag"),)def __str__(self):return self.titleclass Meta:verbose_name = "文章"verbose_name_plural = verbose_nameclass ArticleDetail(models.Model):"""文章详情表"""nid = models.AutoField(primary_key=True)content = models.TextField()article = models.OneToOneField(to="Article", to_field="nid")class Meta:verbose_name = "文章详情"verbose_name_plural = verbose_nameclass Article2Tag(models.Model):"""文章和标签的多对多关系表"""nid = models.AutoField(primary_key=True)article = models.ForeignKey(to="Article", to_field="nid")tag = models.ForeignKey(to="Tag", to_field="nid")def __str__(self):return "{}-{}".format(self.article, self.tag)class Meta:unique_together = (("article", "tag"),)verbose_name = "文章-标签"verbose_name_plural = verbose_nameclass ArticleUpDown(models.Model):"""点赞表"""nid = models.AutoField(primary_key=True)user = models.ForeignKey(to="UserInfo", null=True)article = models.ForeignKey(to="Article", null=True)is_up = models.BooleanField(default=True)class Meta:unique_together = (("article", "user"),)verbose_name = "点赞"verbose_name_plural = verbose_nameclass Comment(models.Model):"""评论表"""nid = models.AutoField(primary_key=True)article = models.ForeignKey(to="Article", to_field="nid")user = models.ForeignKey(to="UserInfo", to_field="nid")content = models.CharField(max_length=255)  # 评论内容create_time = models.DateTimeField(auto_now_add=True)parent_comment = models.ForeignKey("self", null=True)def __str__(self):return self.contentclass Meta:verbose_name = "评论"verbose_name_plural = verbose_name

转载于:https://www.cnblogs.com/ManyQian/p/9271324.html

python3进阶开发-第一个仿博客园的项目(1)相关推荐

  1. H5移动开发AUI框架入门---博客园老牛大讲堂

    大家都知道H5可以开发移动端的页面,网上提供的移动端的开发都有很多.因为我学习了AUI框架,所以我这里介绍一下移动端AUI框架.--博客园老牛大讲堂 一.AUI框架是什么?---博客园老牛大讲堂 AU ...

  2. mysql 进阶_mysql进阶 - 随笔分类 - 云潇洒 - 博客园

    随笔分类 - mysql进阶 1 摘要:防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害 ...

  3. BBS(仿博客园系统)项目03(主页搭建、个人站点搭建(侧边栏分类展示、标签展示、日期归档)、文章详情页相关功能实现)...

    摘要: 主页面的搭建(导航条下面的区域) 个人站点 侧边栏分类展示 侧边栏标签展示 侧边栏日期归档 文章详情页 文章内容 文章点赞点踩 文章评论 一.主页面home.html的搭建(进一步完善) ho ...

  4. 博客园php教程,PHP仿博客园,个人博客(1)_PHP教程

    本人本科学历,自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的 PHP工作,不求工资多高,但求一收留之地.我能看懂大部分英语文档, ...

  5. 【Python3 爬虫】13_爬取博客园首页所有文章

    首先,我们确定博客园首页地址为:https://www.cnblogs.com/ 我们打开可以看到有各种各样的文章在首页,如下图: 我们以上图标记的文章为例子吧!打开网页源码,搜索Docker,搜索结 ...

  6. BBS+ BLOG系统(仿博客园)

    一.基本要求 作业题目:开发BBS+BLOG系统 作业需求: 1 基于ajax和用户认证组件实现登录验证 2 基于ajax和form组件实现注册功能 3 系统首页文章列表的渲染 4 个人站点页面设计5 ...

  7. [Tool] 仿博客园插入代码的 WLW 插件

    一  插件相关效果图展示 插件效果图: 在 Windows Live Writer 中的效果如图: [1] [2] [3] 对应的插入代码在博客中的效果如下: [1] public static vo ...

  8. 仿博客园个人博客(3)基本完成

    唠叨几句: 前段时间找了家公司上班,也算是真正跨入了计算机行业了,可惜地是我们这城市太小,没什么PHP工作机会,少数地几家都是做网络营销型的,我几乎相当于美工!可我不会啊,但是他们招聘条件上说了: 要 ...

  9. python3-开发进阶-仿博客园项目setting.py的文件的配置,admin,forms(2)

    前面我们先分析了一下,做这个项目需要的几张表,今天我们从配置文件开始一步一步去解释这么的原因 首先先来看setting.py文件: """ Django settings ...

最新文章

  1. 17条避坑指南:一份来自谷歌的数据库经验贴
  2. 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程
  3. Serializing Lua objects into Lua Code
  4. Mysql报错130_mysql 突然报错,连接不上
  5. node seneca_使用Node.js和Seneca编写国际象棋微服务,第2部分
  6. 装修材料石膏线品牌加盟类织梦模板
  7. html水调歌头实验总结,水调歌头明月几时有反思小结
  8. pioneer软件VoLTE测试步骤,Pioneer操作说明.docx
  9. rubyonrails test 小记
  10. odoo社区版审批流
  11. javascript caller
  12. 佛经小故事--《盲龟浮木》
  13. mysql查询手机号199开头_从今天起,你将能用上199开头的手机号了……
  14. VS运行错误提示:未处理的异常0xC000 0005
  15. hint: Updates were rejected because the tip of your current branch is behind(git push线上与本地版本冲突问题)
  16. socket之UDP通讯
  17. Joomla模板风格怎么设置
  18. 用Python驱动Headless Chrome
  19. JavaScript_shoping++
  20. 苹果手机壳_苹果官方最贵手机壳,能买一部安卓机!

热门文章

  1. CSS布局奇淫技巧之--各种居中
  2. Javascript启动LINUX的x86模拟器
  3. 修改2440里面的FriendlyARM
  4. GIL , 线程池 , 同步 , 异步 , 队列 , 事件
  5. mysql用户的权限分配
  6. Linux shell 之 提取文件名和目录名的一些方法
  7. Kali-linux使用Nessus
  8. 读取properties
  9. Win2003下Exchange2003部署图解之七
  10. 枚举类型用法_Mybatis-plus常见用法总结三