博客系统需求分析和表结构设计

一、项目流程

1、搞清楚需求(产品经理)

  (1)基于用户认证组件和Ajax实现登录验证(图片验证码)

  (2)基于forms组件和Ajax实现注册功能

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

  (4)设计个人站点页面(跨表查询、分组查询)

  (5)文章详情页

  (6)实现文章点赞功能(Ajax)

  (7)实现文章评论功能:涉及文章的评论和评论的评论

  (8)富文本编辑框和防止xss攻击

2、设计博客园表结构

from django.db import models
# Create your models here.
from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    """
    用户信息表:
    使用用户认证组件,用户表的字段不够用,需要继承AbstractUser类来定制一个自己的用户表。
    在继承后,不再生成auth_user表,直接使用user_info表
    """
    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)   # auto_now_add字段:这个创建时间不用赋值,默认用当前时间赋值

    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):
    """
    博主个人文章分类表:Linux、python、面试心得、鸡汤
    分类表和用户表是多对一的关系,由于用户和站点是一对一,分类表与站点也是多对一的关系
    """
    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)   # True:赞,  False:灭

    class Meta:
        unique_together = [
            (‘article‘, ‘user‘),
        ]

class Comment(models.Model):
    """
    评论表
    根评论:对文章的评论
    子评论:对评论的评论
    哪一个用户对哪一篇文章在什么时间做了什么评论内容
    nid    user_id  article_id    content    parent_comment_id(null=True)
    1       1           1           111             null
    2       2           1           222             null
    3       3           1           333             null
    4       4           1           444               1
    5       5           1           555               4
    """
    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("Comment")   # 关联Comment表,本身就在Comment表中,因此是自关联
    parent_comment = models.ForeignKey(‘self‘, null=True, on_delete=models.CASCADE)   # 设置null=True,为null的情况不用存值了

    def __str__(self):
        return self.content

博客系统表关系

  博客系统表结构流程图:https://www.processon.com/diagraming/5b529154e4b0f8477d8d0d9d

  

3、按着每一个功能进行开发

4、功能测试

5、项目部署上线

原文地址:https://www.cnblogs.com/xiugeng/p/9344743.html

时间: 2024-11-20 18:52:15

博客系统需求分析和表结构设计的相关文章

Django开发博客系统(01-前言与需求分析)

原本是跟着视频学,无奈发现视频中用到的资源找不到,于是自己买了本书来进行学习,贴上JD链接.<Django企业开发实战> 我的开发环境是win10+python3.8+django3.0.4,而书上是在linux环境下进行开发的,= =(汗),先这样学下去吧,毕竟面向百度编程.写博客也是为了督促一下自己,毕竟在家里宅着容易学着学着就玩手机去了.. 书前面还有一些入门知识,这里我就直接跳到做项目的部分了. 目标是开发一个博客系统, 需求分析: 简单来说,博客分为两个部分:读者访问部分(用户端)和

基于SAE+CodeIgniter3.0+管理端angularjs+前台amazeui的多用户博客系统V1.0--系统设计(一)

开发环境: 服务器系统:CentOS-6.x web服务器:Apache-2.2.x php版本:PHP-5.3.x 开发工具:sublime text 3 ,谷歌浏览器 数据库查询工具:phpmyadmin 协作工具:乌龟SVN 约定: 数据表前缀:blog_ 数据表主键名:表名_id,自增,不为空 时间字段类型统一为timestamp,每个表必须含有创建时间(默认当前时间),更新时间(默认由mysql更新) 字符集采用UTF-8 项目定义:多用户博客系统--运行在SAE上,基于php的最新3

Python课程的期末项目--实现了一个及其简单的个人博客系统

目录 1. 项目简介 1.1 本项目博客地址 1.2 项目的的功能与特色 1.3 项目采取的技术栈 1.4 项目借鉴源代码的github地址或博客地址 1.5 团队成员任务分配表 2. 前期调查与需求分析 3. 项目功能架构图.主要功能流程图 4. 系统模块说明 4.1 系统中包含的模块列表 4.2 系统各模块详细描述 4.2.1 分页功能 4.2.2 标签功能 5.项目总结 5.1 系统特点 5.2 系统不足与可改进的地方 1. 项目简介 1.1 本项目博客地址 https://www.cnb

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业

【ASP.NET实战教程】基于ASP.NET技术下多用户博客系统全程实战开发(NNblog)

岁末主推:牛牛老师主讲,多用户博客系统,基于ASP.NET技术,年后将带来移动业务平台项目项目目标: 打造个性品牌Blogo,定制多用户博客 为每一个博客用户提供个性化的 blogo解决方案,打造精品blogo门户网站  环境:VS2008+SQL Server2005 [小编推荐:现在学习可以使用 VS2012或者以上+SQL 2008或及以上  环境不一定必须和教程一样,学习的是思路]主要技术: 主体框架:逻辑架构ASP.NET MVC,物理架构Three Ties,2者相结合. 为了提高网

从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效果 2.2实现控制器在前台控制器中创建一个Blog的控制器,主要是展示博客分类以及详情页 Action详情页实现: 1 /// <summary> 2 /// 详情页 3 /// </summary> 4 /// <param name="id"><

从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑

前言      从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章的评论,在里面能看出有很多种声音,有支持的我的朋友给我加油打气,有分享自己工作经历的朋友,有提出忠肯意见的朋友,有对记事本写代码吐槽的朋友,也有希望让我换个行业的,觉得我可能不适合这个行业朋友,不管怎样,我都接受,都是大家同行的一些忠告,谢谢大家. 首先我要在这里感谢很多博客园里面的大牛,写了很多系

一款金牌PHP博客系统的打造(启示录)

如何使用PHP自定义博客管理系统呢? 需要的条件: PHP开发环境是zend studio,数据库MySQL,服务器Apache. 脚本语言jquery, 开发PHP博客系统的步骤: one,用户模型:图1: two:组织结构与角色 用户 --管理员--游客 three:角色说明 four:游客功能模块 five:用户功能模块 six:管理员功能模块 seven 数据分析 eight 分类数据分析 nine:页面数据分析 ten:链接数据分析 eleven;用户数据分析 twelve 相册数据分

一个超漂亮的Java版博客系统,内置14套皮肤,已经转化为标准的Eclipse项目,直接导入即可

原文:一个超漂亮的Java版博客系统,内置14套皮肤,已经转化为标准的Eclipse项目,直接导入即可 源代码下载地址:http://www.zuidaima.com/share/1550463745002496.htm MrZhao只分享精品,话不多说,直接上图      - 为了压缩文件我把WEB-INF下面的lib包打包放在网盘下载地址:http://pan.baidu.com/s/1hqqqWOc - 把lib解压进去以后项目直接导入Eclise即可运行 - 数据库Mysql,确保一个新