个人网站搭建(Day 4)— My second app:blog

今天我们来做第一个应用型的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 简易博客开发 2 模板和数据查询

django 简易博客开发 3 静态文件、from 应用与自定义 

可以结合 个人网站搭建(Day 3)— 初探前端 理解模板同后端视图函数的关系。

接下来的博文会讲一讲 Django 的表单。

 

 

你可能感兴趣的:(个人网站搭建)