目录
一、数据表检查:
二、对功能进行测试
2.1增加文章
2.2修改文章
2.3删除文章
三、系统设计
四、博客系统分析
五、系统实现
六、使用手册
七、总结:
一、数据表检查:
在pycharm程序中,提供了一个可视化数据库查看,通过点击每一选项,可以查看功能,如图所示:
二、对功能进行测试
2.1增加文章
1、首先进入后台
2、添加文章并保存
3、刷新页面看是否成功
以上是对系统文章增加进行的简单测试,接下来测试修改、删除文章。
2.2修改文章
1、进入后台,点击修改
2、保存
3、刷新页面测试是否成功
2.3删除文章
1、进入后台,点击删除
2、保存
3、刷新页面测试是否成功
三、系统设计
Blog主要以文章内容为主。因此在设计数据库的时候,我们主要以文章信息为核心数据,然后逐步向外扩展相关联的数据信息。
对于一篇博客,其需要的信息有以下:
1、标题
2、分类
3、作者
4、浏览次数
5、发布时间
6、文章标签
7、内容(最主要)
在以上的信息中,文章与分类的关系是一对多,也即一篇文章只能有一个分类,而一个分类可以有多个文章;文章与标签的关系是多对多。
我们将文章表命名为Article,其数据结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
title CharField类型,长度为100 文章标题
category ForeignKey 外键,关联文章分类表
tags ManyToManyField 多对多,关联标签列表
body TextField 文章内容
user ForeignKey 外键,文章作者关联用户模型,系统自带的
views PositiveIntegerField 文章浏览数,正的整数,不能为负
tui ForeignKey 外键,关联推荐位表
created_time DateTimeField 文章发布时间
从文章表里,我们关联了一个分类表,我们把这个分类表命名为category,category表的数据库结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
name CharField类型,长度为30 分类名
文章关联的标签表,我们命名为tag,结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
name CharField类型,长度为30 标签名
文章关联的推荐位表,命名为tui,结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
name CharField类型,长度为30 标签名
除此之外,我们还有两个独立的表,和文章没有关联的,一个是幻灯图片的表,一个是友情链接的表。
幻灯图表,命名为banner,数据库结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
text_info CharField类型,长度为100 标题,图片文本信息
img ImageField类型 图片类型,保存传图片的路径
link_url URLField类型 图片链接的URL
is_active BooleanField布尔类型 有True 和False两个值,意思为是否激活
友情链接表命名为link,结构如下:
表字段 字段类型 备注
id int类型,长度为11 主键,由系统自动生成
name CharField类型,长度为70 友情链接的名称
linkurl URLField类型 友情链接的URL
至此,我们的数据库构造大致完成,后期如果还有其它的需求,我们可以在这基础上进行增加或者删除。下面我们就开始进行项目的创建与开发。
四.博客系统分析
从功能需求来看,这个Blog的功能分为:网站首页、文章分类、文章内容、幻灯图片、文章推荐、文章排行、热门推荐、文章搜索、友情链接。
1、网站首页:网站首页是整个网站的主界面,也是网站入口界面,里面主要展示Blog的动态信息及Blog功能导。网站动态信息以文章为主,如最新文章、幻灯图片、推荐阅读、文章排行、热门推荐、友情链接等。导航栏主要是将文章的分类的链接展示在首页,方便用户浏览。
2、文章分类,主要展示文章分类信息及链接,方便用户按需查看。文章分类可以在后台添加删除。
3、文章内容,主要展示文章所属分类、文章所属标签、文章内容、作者信息,发布时间信息。可以通过后台增、删、改。
4、幻灯图片,在网站首页,通过图片和文字展示一些重要信息,可以通过后台添加图片、图片描述、图片链接。
5、文章推荐,推荐一些重要的文章,可以在后台进行推荐。
6、文章排行,可根据文章浏览数,按时间段进行查询,然后展示出来。具体可根据自己的需求修改。
7、热门推荐,同样的推荐一些需要推荐的文章,可以在后台按需求或推荐位进行设置。
8、文章搜索,通过关键词搜索文章。
9、友情链接,展示相互链接的网站的名称与链接,可以通过后台添加与删除。
10、单页面,展示网站介绍,作者联系方式等信息,此类信息不经常变动,可以通过后台实现修改,也可以通过修改模板实现。
了解需求之后,就由UI设计师根据网站需求来设计网站页面,然后由前端工程师根据设计好的页面进行切图,实现HTML静态页面,最后由后端根据HTML页面和需求实现数据库构建和网站后台开发。
从设计方面来看,Blog主要分为六个页面,分别是:网站首页、文章分类列表页、文章内容页、搜索列表页、标签列表页、单页面。
1、网站首页,信息聚合的地方,展示多种信息。
2、文章分类列表页,点击分类,进入一个同一分类文章展示的列表页面。
3、文章内容页,文章内容展示页面
4、搜索列表页,通过首页搜索按钮,展示出与搜索 词相关的文章列表。
5、标签列表页,展示同一个标签下的所有文章。
6、单页面,展示网站介绍、作者介绍或者联系方式等信息。From the point of view of functional requirements, the Blog functions are divided into: Website home page, article classification, article content, slide images, article recommendation, article ranking, popular recommendation, article search, links. 1. Home Page: The home page is the main interface of the site, but also the site entrance interface, which mainly shows the Blog’s dynamic information and Blog function guide. Website dynamic information to article-based, such as the latest articles, slide pictures, recommended reading, article ranking, popular recommendations, links and so on. Navigation Bar is the main article of the classification of links displayed on the home page, easy for users to browse. 2, the article classification, mainly displays the article classification information and the link, facilitates the user according to the need to view. Post categories can be added or removed in the background. 3, article content, mainly shows the article belongs to the classification, article belongs to the TAG, Article Content, author information, release time information. You can add, delete, and modify them in the background. 4. slideshows, on the front page of the site, show important information through images and text, and add images, picture descriptions, and picture links in the background. 5. Article Recommendations, recommend some important articles, you can recommend in the background. 6, article ranking, according to the number of articles viewed, by the time of query, and then display. The specific can be modified according to their own needs. 7, popular recommendation, the same recommendation some need to recommend the article, can be set in the background by the request or recommendation bit. 8. Article Search, search articles by keywords. 9. Friendship links, showing the names and links of linked websites, which can be added and removed in the background. 10, a single page, display site introduction, author contact information, such information does not change frequently, can be changed through the background, you can also change the template to achieve. After understanding the requirements, it is up to the UI designer to design the website page according to the website requirements, and then the front-end engineer to cut the map according to the designed page to realize the HTML static page, finally, according to the back-end HTML pages and requirements of database construction and website background development. From the design point of view, Blog is mainly divided into six pages, namely: the Website home page, the article classification list page, the article content page, the search list page, the tag list page, single page. 1. The home page, where information is aggregated, shows a variety of information. 2, the article classification list page, click on the classification, go to the same category article display list page. 3, Article Content Page, article content display page 4, search list page, through the home page search button, show and search, word-related article list. 5. Tag List Page, showing all articles under the same tag. 6. Single page, display site description, author description, contact information, etc. .
五、系统实现
完成对数据库物理设计之后,现在要使用关系数据库管理系统提供的数据定义语言和其他应用程序将数据库逻辑设计和物理设计结果严格描述出来,成为关系数据库管理系统可以接受的源代码。(在我搭建的项目使用的是mysql和python的Django框架来实现)
数据的载入:
个人博客系统数据的载入就是编写文章,然后添加、删除、修改文章,对文章的一切操作都是由后台负责的,所以我们只需要写好后台的操作就好了。
应用程序的实现:
我选择的Django框架本身提供了一个良好的后台交互界面和数据库的操作处理,其对数据库的操作是使用model操作,不管你使用mysql或者sqlite,它都在后台自动生成相应的操作。于是我只需使用python语言编写好各个模型,确定好它们之间的关系,以及它们字段与字段的关系即可。这里我将关于实现数据库的python语言编写在下方:
from django.db import models
from django.contrib.auth.models import User
#导入Django自带用户模块
class Category(models.Model):
name = models.CharField(‘博客分类’, max_length=100)
index = models.IntegerField(default=999, verbose_name=‘分类排序’)
class Meta:
verbose_name = '博客分类'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
#文章标签
class Tag(models.Model):
name = models.CharField(‘文章标签’,max_length=100)
class Meta:
verbose_name = ‘文章标签’
verbose_name_plural = verbose_name
def __str__(self):
return self.name
#推荐位
class Tui(models.Model):
name = models.CharField(‘推荐位’,max_length=100)
class Meta:
verbose_name = '推荐位'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
#文章
class Article(models.Model):
title = models.CharField(‘标题’, max_length=70)
excerpt = models.TextField(‘摘要’, max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name=‘分类’, blank=True, null=True)
#使用外键关联分类表与分类是一对多关系
tags = models.ManyToManyField(Tag,verbose_name=‘标签’, blank=True)
#使用外键关联标签表与标签是多对多关系
img = models.ImageField(upload_to=‘article_img/%Y/%m/%d/’, verbose_name=‘文章图片’, blank=True, null=True)
body = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=‘作者’)
“”"
文章作者,这里User是从django.contrib.auth.models导入的。
这里我们通过 ForeignKey 把文章和 User 关联了起来。
“”"
views = models.PositiveIntegerField(‘阅读量’, default=0)
tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING, verbose_name=‘推荐位’, blank=True, null=True)
created_time = models.DateTimeField('发布时间', auto_now_add=True)
modified_time = models.DateTimeField('修改时间', auto_now=True)
class Meta:
verbose_name = '文章'
verbose_name_plural = '文章'
def __str__(self):
return self.title
#Banner
class Banner(models.Model):
text_info = models.CharField(‘标题’, max_length=50, default=’’)
img = models.ImageField(‘轮播图’, upload_to=‘banner/’)
link_url = models.URLField(‘图片链接’, max_length=100)
is_active = models.BooleanField(‘是否是active’, default=False)
def __str__(self):
return self.text_info
class Meta:
verbose_name = '轮播图'
verbose_name_plural = '轮播图'
#友情链接
class Link(models.Model):
name = models.CharField(‘链接名称’, max_length=20)
linkurl = models.URLField(‘网址’,max_length=100)
def __str__(self):
return self.name
class Meta:
verbose_name = '友情链接'
verbose_name_plural = '友情链接'
六、使用手册
1、个人博客系统使用非常简单,首先运行程序,输入账号密码,其次可以通过http://127.0.0.1:8000/admin 进入后台管理,在后台对文章经行增删修改操作!
七、总结:
1、整个项目是通过网上学习来完成,大部分都是一步步根据别人的代码写出来的,缺乏创新性。
2、这个项目由于不用自己编写数据库实现的语言,反倒是一大堆前端语言,与该门课程培养的目标脱钩。
3、该项目使我意识到团队的合作是多么重要,彼此之间要互相协调,才能尽量避免错误。
4、该项目的遗憾是有些功能没有实现,比如轮播图。虽然一开始信誓旦旦觉得自己可以,但当遇到具体问题才知道没有强一点的技术能力是不行的。所以还是要好好继续深入学习。