博客项目
目前的目标是构建一个基于 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
来源: http://www.bubuko.com/infodetail-2748425.html