今天我们来做第一个应用型的app:blog,这是个人博客功能,主要提供管理员编写/修改博客的功能,以及提供其他用户评论的功能。
blog 的 models.py 如下
1)Blog是主要的模型,包含了博客应有的基本属性,注意博客的tags属性,这里涉及到数据库中的模型间的关系。模型间的关系主要有 一对一,一对多,多对多这三种。从名称上就能够知道他们之间的关联关系,具体到这个例子就是说:一篇博客可能有多个标签(tag),而一个标签又能够关联多篇博客。
除此之外,我们在Blog中还使用了富文本编辑器(开始的时候是选择 django-markdown 来实现,但是效果不佳),后续改用了django-simditor,获得比较满意的效果,还扩展了代码高亮的功能,之后会有一篇博客专门讲django-simditer以及代码高亮插件的使用。
class Blog(models.Model):
caption = models.CharField(max_length=50, default='')
author = models.ForeignKey(User, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, blank=True)
content = RichTextField()
read_num = models.IntegerField(default=0)
publish_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
recommend = models.BooleanField(default=False)
def __str__(self):
return u'%s %s %s' % (self.caption, self.author, self.publish_time)
class Meta:
ordering = ['-publish_time']
2) Tag中的基本属性有 tag_name, create_time,主要是用于对博客的分类,例如:Django,Algorithm...
若需要通过Tag获取有哪些博文,这种多对多字段需要用tag.blog_set.all()这种方式。另外外键字段筛选也是如此。
class Tag(models.Model):
tag_name = models.CharField(max_length=20, default='')
create_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.tag_name
3) Comment为博客评论,功能以及属性相对简单
class Comment(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
author = models.ForeignKey(User, on_delete=models.CASCADE)
publish_time = models.DateTimeField(auto_now_add=True)
content = models.TextField(max_length=400, default='')
class Meta:
ordering = ['-publish_time']
其他扩展问题,比如说数据查询,表单,模板以及静态文件问题,具体可参考以下两篇文章:
django 简易博客开发 3 静态文件、from 应用与自定义
可以结合 个人网站搭建(Day 3)— 初探前端 理解模板同后端视图函数的关系。
接下来的博文会讲一讲 Django 的表单。