大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,我们来设计文章的模型。
Peekpa.com的官方地址:peekpa.com

上一节,我们已经把文章详情页写好了,这一节,我们要开发文章模型了。
早在一开始,我们就创建了Post应用,那么我们的文章结构设计,也会在这个应用当中创建。
需求分析
首先我们得简单分析一下文章模型应该有哪些变量:
- 标题(
title) - 作者(
author) - 摘要(
description) - 缩略图(
thumbnail) - 正文(
content) - 正文HTML(
content_html) - 是否是md格式(
is_md) - 分类(
category) - 标签(
tag) - 状态(
status) - 发布时间(
publish_time) - 显示时间(
publish_time_show) - 文章时间ID(
time_id)
这里要说一下‘是否是md格式’和‘正文HTML’这两个变量。
因为我们的文章是以md格式写的,所以这里我们要做一个判断,是否是md格式输入。如果是md格式的输入,我们使用mistune库来讲我们输入的md文章转化成html格式,再将结果保存到content_html中。
细心的同学就会发现,这里我们新引入了两个东西,分类(category)和标签(tag),这两个东西,我们也要单独抽出来,创建模型,但是这两个目前很简单,只需要一个名字就好了。
但是,因为我们的首页有好几个板块,比如把文章放到顶部的四个位置,所以我们还需要添加几个辅助变量才行:
- 是否是置顶文章(is_top)
- 是否是首页文章(is_hot)
- 权重(priority)
简单说一下这几个变量的作用:
- 是否是置顶文章,是将来还会有文章列表页面,到时候需要一篇或者两篇文章是置顶的;
- 是否首页文章和权重,则是反映出首页顶部四个大图的文章。通过权重的值来调整位置。
这下简单了,接下来我们就只需要在Post应用下的models.py文件中,创建我们的post,category还有tag类就可以了:
class Category(models.Model):
name = models.CharField(max_length=100)
create_time = models.DateTimeField(auto_now_add=True)
class Tag(models.Model):
name = models.CharField(max_length=100)
create_time = models.DateTimeField(auto_now_add=True)
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey('peekpauser.User', on_delete=models.SET_NULL, null=True)
description = models.CharField(max_length=200)
thumbnail = models.URLField()
content = models.TextField()
content_html = models.TextField(blank=True, editable=False)
is_md = models.BooleanField(default=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
tag = models.ManyToManyField(Tag)
status = models.PositiveIntegerField(default=STATUS_DRAFT, choices=STATUS_ITEMS)
publish_time = models.DateTimeField(auto_now_add=True)
publish_time_show = models.DateTimeField(default=datetime.datetime.now)
time_id = models.CharField(blank=True, max_length=30)
这里简单说一下:
author使用的是外键,和peekpauser联动在一起;content_html默认是空,只有在保存的时候,如果is_md是true,才会自动保存content_html的内容,而且不能编辑,全部都靠系统自动保存;category和tag分别是一对一和多对多;status则是表示文章状态;
最后别忘了,我们需要在settings.py文件里的INSTALLED_APPS里面添加我们post应用,即:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.peekpauser',
'apps.poster', # 新添加的Poster应用
]
此时,在执行makemigration和migrate命令,就会看到下面的图片:

看到系统为我们创建了几张表,我们再到数据库里面看一下:

没错,就是红框里面的那几个表。
到此,我们的Post模型就创建完了。下一步我们就是在CMS系统里面添加发布文章了。
技术总结
最后总结一下,
文章Post模型:
- 在Post目录下的models.py文件里面创建数据类;
- 提前分析可能会出现的变量,设计相关变量的类型和默认值;
- 在settings.py文件中的
INSTALLED_APPS里面添加post应用; - 只有在settings.py文件中添加了,才能执行makemiagration和migrate命令有效;
- 完毕。
获取代码的唯一途径:关注『皮爷撸码』,回复『代码』即可获得。
长按下图二维码关注,如文章对你有启发,欢迎在看与转发。
