博客系统

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
View Code       

相关文章: