博客登录系统

博客系统

1、建表阶段

关系图:

上图解析:

这个表中共有十张表:
    用户表(userinfo):
        建表原因:保存用户的信息。继承了django自带的AbstracUser用户信息表
        字段:
                inckname(昵称)
                telephone(手机号)
                avatar(头像)
                create_time(创建时间)


    博主个人站点表(Blog):
        建表原因:为了显示个人的所有博客信息
        字段:
                title(个人博客标题)
                site(个人博客后缀)
                theme(个人博客主题)
                user(对应用户)---------和用户表一对一关系


    文章分类表(Category):
        建表原因:为了把文章细分成类
        字段:
                title(文章标题)
                blog(所有博客)---------和博客表多对一关系


    文章表(Article):
        建表原因:存储个人文章信息
        字段:
                title(文章标题)
                desc(文章描述)
                read(文章阅读量)
                comment_count(文章评论量)
                up_count(文章置顶)
                down_count(文章置末尾)
                create_time(文章创建时间)
                category(文章类型)-----和类型表多对一
                user(所属用户)----------和用户表多对一
                tags(标签)---------------和标签表多对一


    文章详情表(ArtivleDetail):
         建表原因:存储个人文章的详细信息
         content(文章内容)
        article(所属文章)---------------和文章表一对一关系


    评论表(Comment):
        建表原因:对文章的评论
        content(评论内容)
        create_time(创建时间)
        up_count(评论量)
        user(评论者)-------------------和用户表多对一关系
        article(评论文章)---------------和文章表多对一关系
        parent_comment(父级评论)---和自己自关联(为的是能自己评论自己,可以评论别人的评论)


    评论点赞表(CommentUp):
        建表原因:对评论的点赞
        user(点赞的用户)--------------和用户表多对一关系
        comment(被点赞评论)--------和评论表多对一关系


    标签表(Tag):
        title(标签名称)
        bolg(所属博客)----------------和博客表多对一关系


    文章表和标签第二张表(Article2Tag):
        建表原因:为了形成文章和标签的多对多关系,让后期添加数据更为方便
        article(文章)-----------------------和文章表多对一关系
        tag(标签)--------------------------和标签表多对一关系

 

数据库代码实现:

创建表:

from django.db import models
from django.contrib.auth.models import AbstractUser    #admin 表中的有些字段就不会显示

#Create your models here.



class UserInfo(AbstractUser):  #settings:     AUTH_USER_MODEL = 'blog.UserInfo'

    '用户信息'
    nid = models.BigAutoField(primary_key=True)
    nickname = models.CharField(verbose_name='昵称', max_length=32)
    telephone = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手机号码')
    avatar = models.FileField(verbose_name='头像', upload_to='avatar', default='/avatar/default.pag')
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    class Meta:
        verbose_name_plural = '用户信息表'
    def __str__(self):
        return self.username      #这里可以看做是验证成功返回的值


class Blog(models.Model):
    '''
    站点信息
    '''
    nid = models.BigAutoField(primary_key=True)
    title = models.CharField(varbose_name='个人博客标题', max_length=64)
    site = models.CharField(verbose_name='个人博客后缀', max_length=32, unique=True)
    theme = models.CharField(verbose_name='博客主题', max_length=32)
    user = models.OneToOneField(to='UserInfo', to_field='nid')
    class Meta:
        verbose_name_plural = '站点信息表'
    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 Meta:
        verbose_name_plural='文章分类表'


class Article(models.Model):
    '''
    文章表,最主要的一张表
    '''
    nid = models.BigAutoField(primary_key=True)
    title = models.CharField(max_length=50, verbose_name='文章标题')
    desc = models.CharField(max_length=255, verbose_name='文章描述')    #外键用更加详细的描述
    read_count = models.IntegerField(default=0)
    comment_count = models.IntegerField(default=0)
    up_count = models.IntegerField(default=0)
    down_count = models.IntegerField(default=0)
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)     # auto_now_add     当前时间
    category = models.ForignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True)    #多个文章对应一个类型
    user = models.ForeignKey(verbose_name='所属用户', to='UserInfo', to_field='nid')      #多个文章对应一个用户
    tags = models.ManyToManyField(to='Tag', through='Articld2Tag', through_fields=('article', 'tag'),)
    type_choise = [(1,'编辑语言'), (2, '软件设计'), (3, '前端'), (4, '操作系统'), (5, '数据库'),]
    article_type_id = models.IntegerField(choices=type_choices, default=None)
    class Meta:
        verbose_name_plural = '文章表'
    def __str__(self):
        return self.title


class ArticleDetail(models.Model):
    '''
    文章详细表
    '''
    nid = models.AutoField(primary_key=True)
    content = models.TexField(verbose_name='文章内容',)
    artiale = models.OneToOneField(verbose_name='所属文章', to='Ariticle', to_field='nid')     #每个文章的简介只是对应一篇文章
    class Meta:
        verbose_name_pural = '文章详细表'
    def __str__(self):
        return self.content


class Comment(models.Model):
    '''
    评论表
    '''
    nid = models.BigAutoField(primary_key=True)
    content = models.CharField(verbose_name='评论内容', max_length=225)
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    up_count = medels.IntegerField(default=0)
    user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid')     #评论表由多个人组件起来的
      article = models.ForignKey(verbose_name='评论文章', to='Article', to_field='nid')     #评论的是文章
    parent_comment = models.ForeignKey('self', blank=True, null=True, berbose_name='父级评论')     #自关联, 父级评论
    class Meta:
        verbose_name_plural = '评论表'
    def __str__(self):
        return self.content



class CommentUp(models.Model):
    '''
    评论点赞表
    '''
    nid = models.SutoField(primary_key=True)
    user = models.ForeignKey('UserInfo', null=True)     #用户点赞
    comment = models.Foreignkey('Comment', null=True)    #对评论点赞
    class Meta:
        verbose_name_plural = '评论点赞表'


class Tag(models.Model):
    '''
    标签表
    '''
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name='标签名称', max_length=32)
    blog = model.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid')     # 多个标签属于一个博客
    class Meta:
        verbose_name_plural = '标签表'
    def __str__(self):
        return self.title


class Artivle2Tag(models.Model):
    '''
    文章标签的第二张表,自己新建的
    '''
    nid = models.AutoField(primary_key=True)
    aritcle = medols.ForeignKey(verbose_name='文章', to='Artice', to_field='nid')        # 对应文章
    tag = models.ForeignKey(verbose_name='标签', to='Tag', to_field='nid')
    class Meta:
        unique_together = [
            ('article', 'tag'),
        ]    

 

posted on 2018-02-03 19:03  一万年  阅读(879)  评论(0编辑  收藏  举报