博客系统
1 搞清楚需求(产品经理)
1,基于用户认证组件和Ajax实现登录验证(图片验证码) 2,基于forms组件和Ajax实现注册功能 3,设计系统首页(文章列表渲染) 4,设计个人站点页面 5,文章详情页 6,实现文章点赞功能 7,实现文章评论功能 ---文章的评论 ---评论的评论 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) 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') 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') 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') category=models.ForeignKey(to="Category",to_field='nid',null=True) 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') tag=models.ForeignKey(verbose_name='标签',to='Tag',to_field='nid') 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) article=models.ForeignKey('Article',null=True) 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') user=models.ForeignKey(verbose_name='评论者',to='UserInfo',to_field='nid') 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) def __str__(self): return self.content