Django——博客项目

Posted huang-yc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django——博客项目相关的知识,希望对你有一定的参考价值。

博客项目

目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下:

技术分享图片

 

1. 分析需求

1.1. 1.基于用户认证组件和Ajax实现登录验证

1.2. 基于forms组件和Ajax实现注册功能

1.3. 设计系统首页(文章列表渲染)

1.4. 设计个人站点页面

1.5. 文章详情页

1.6. 实现文章点赞功能

1.7. 实现文章的评论

  1.7.1. 文章的评论

  1.7.2. 评论的评论

1.8. 富文本编辑框和防止xss攻击

2. 设计表结构

技术分享图片

 module代码:

技术分享图片
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)
    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)
    article = models.ForeignKey(verbose_name=评论文章, to=Article, to_field=nid, on_delete=models.CASCADE)
    user = models.ForeignKey(verbose_name=评论者, to=UserInfo, to_field=nid, on_delete=models.CASCADE)
    content = models.CharField(verbose_name=评论内容, max_length=255)
    create_time = models.DateTimeField(verbose_name=创建时间, auto_now_add=True)
    parent_comment = models.ForeignKey(self, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.content
View Code

 

  1. 用户信息表
  2. 博客信息表
  3. 博主个人文章分类表
  4. 博主个人文章标签表
  5. 博文表
  6. 文章标签关联表
  7. 点赞表
  8. 评论表 

3. 功能开发

4. 功能测试

5. 项目部署上线

以上是关于Django——博客项目的主要内容,如果未能解决你的问题,请参考以下文章

[技术博客]使用pylint实现django项目的代码风格检查

2 - 建立 Django 博客应用

Python 和 Django 博客示例项目

回归 | js实用代码片段的封装与总结(持续更新中...)

如何在 Django Summernote 中显示编程片段的代码块?

Django项目开发实例之我的博客