1. 程式人生 > >python3進階開發-第一個仿博客園的項目(1)

python3進階開發-第一個仿博客園的項目(1)

tar 評論 bsp 標簽 表結構 abs date 簽名 多個

首先我們要設計一下表結構:

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 AbstractUser

class UserInfo(AbstractUser):
    """
    用戶信息表
    """
    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.username class Meta: verbose_name = "用戶信息" verbose_name_plural = verbose_name class 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.title class Meta: verbose_name = "博客" verbose_name_plural = verbose_name class 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_name class 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.title class Meta: verbose_name = "標簽" verbose_name_plural = verbose_name class 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.title class Meta: verbose_name = "文章" verbose_name_plural = verbose_name class 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_name class 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_name class 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_name class 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.content class Meta: verbose_name = "評論" verbose_name_plural = verbose_name

python3進階開發-第一個仿博客園的項目(1)