1、搞清楚需求

  1. 基于用户认证组件auth和Ajax实现登录验证(图片验证码)
  2. 基于forms组件和Ajax实现注册功能
  3. 设计博客系统首页(文章列表渲染)
  4. 设计个人站点页面
  5. 文章详情页
  6. 实现文章点赞功能
  7. 实现文章的评论
    1. 文章的评论
    2. 评论的子评论
  8. 富文本编辑框以及xss攻击

2、设计表结构

            from django.contrib.auth.models import User,AbstractUser

            class UserInfo(AbstractUser):
                """
                用户信息
                """
                nid = models.AutoField(primary_key=True)
                telephone = models.CharField(max_length=11, null=True, unique=True)
                avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png")
                create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)


                blog = models.OneToOneField(to='Blog', to_field='nid', null=True,on_delete=models.CASCADE)

                def __str__(self):
                    return self.username


            class Blog(models.Model):

                """
                博客信息表(站点表)
                """
                nid = models.AutoField(primary_key=True)
                title = models.CharField(verbose_name='个人博客标题', max_length=64)
                site_name = models.CharField(verbose_name='站点名称', max_length=64)
                theme = models.CharField(verbose_name='博客主题', max_length=32)

                def __str__(self):
                    return self.title


            class Category(models.Model):
                """
                博主个人文章分类表
                """
                nid = models.AutoField(primary_key=True)
                title = models.CharField(verbose_name='分类标题', max_length=32)
                blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid',on_delete=models.CASCADE)

                def __str__(self):
                    return self.title


            class Tag(models.Model):
                nid = models.AutoField(primary_key=True)
                title = models.CharField(verbose_name='标签名称', max_length=32)
                blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid',on_delete=models.CASCADE)

                def __str__(self):
                    return self.title


            class Article(models.Model):
                nid = models.AutoField(primary_key=True)
                title = models.CharField(max_length=50, verbose_name='文章标题')
                desc = models.CharField(max_length=255, verbose_name='文章描述')
                create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
                content = models.TextField()

                comment_count=models.IntegerField(default=0)
                up_count=models.IntegerField(default=0)
                down_count=models.IntegerField(default=0)

                user = models.ForeignKey(verbose_name='作者', to='UserInfo', to_field='nid',on_delete=models.CASCADE)
                category = models.ForeignKey(to='Category', to_field='nid', null=True,on_delete=models.CASCADE)
                tags = models.ManyToManyField(
                    to="Tag",
                    through='Article2Tag',
                    through_fields=('article', 'tag'),
                )



                def __str__(self):
                    return self.title


            class Article2Tag(models.Model):
                nid = models.AutoField(primary_key=True)
                article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid',on_delete=models.CASCADE)
                tag = models.ForeignKey(verbose_name='标签', to="Tag", to_field='nid',on_delete=models.CASCADE)

                class Meta:
                    unique_together = [
                        ('article', 'tag'),
                    ]

                def __str__(self):
                    v = self.article.title + "---" + self.tag.title
                    return v


            class ArticleUpDown(models.Model):
                """
                点赞表
                """

                nid = models.AutoField(primary_key=True)
                user = models.ForeignKey('UserInfo', null=True,on_delete=models.CASCADE)
                article = models.ForeignKey("Article", null=True,on_delete=models.CASCADE)
                is_up = models.BooleanField(default=True)

                class Meta:
                    unique_together = [
                        ('article', 'user'),
                    ]


            class Comment(models.Model):
                """

                评论表

                """
                nid = models.AutoField(primary_key=True)
                user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid',on_delete=models.CASCADE)
                article = models.ForeignKey(verbose_name='评论文章', to='Article', to_field='nid',on_delete=models.CASCADE)
                create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
                content = models.CharField(verbose_name='评论内容', max_length=255)


                parent_comment=models.ForeignKey("self",null=True,on_delete=models.CASCADE)


                def __str__(self):
                    return self.content

  

            根评论:对文章的评论
            
            子评论:对评论的评论
            

            111
                444
                   555
            222
            333


            Comment

            nid   user_id  article_id    content      parent_comment_id(null=True)
             1      1          1            111              null
             2      2          1            222              null
             3      3          1            333              null
             4      4          1            444                1 
             5      5          1            555                4  
models.py

相关文章: