设计思路
1.产品需求
(1) 基于用户认证组件和Ajax实现登录验证(图片验证码)
(2) 基于forms组件和Ajax实现注册功能
(3) 设计系统首页 (文章列表渲染)
(4) 设计个人站点页面
(5) 文章详情页
(6) 实现文章点赞功能
(7) 实现文章的评论
------文章的评论
------评论的评论
(8) 富文本编辑框和防止xss攻击
2.设计表结构
表关系如下:
根据表关系创建出如下8个表
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.jpg") creat_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(verbose_name="文章标题", max_length=50) desc = models.CharField(verbose_name="文章描述", max_length=255) 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(verbose_name="分类", 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
3.按照每一个功能/需求进行开发
具体内容请点击下面链接下载