Lei Zhang

时光已逝永不回,
往事只能回味。
... ...
春风又吹红了花蕊,
你已经也添了新岁。

▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 96%



基于Django来构建博客模型

2017-11-28 » Python / Django , Tutorial , 代码块
本教程使用 Django 1.11 ,假定你已初步了解 Django,明白如何使用 virtualenv 搭建虚拟环境、安装 Django、并已动手实践过官方的 Turoral(part1-7)

文章模型

字段名 说明
title 标题
desc 简述
text 正文
status 文章状态。'd':草稿,'p':'发布'
views 浏览量
created_time 创建时间
last_mod_time 最后修改时间
pub_time 发布时间
author 作者
category 分类
tags 标签集合

分类模型

字段名 说明
name 分类名
created_time 创建时间
last_mod_time 修改时间

标签模型

字段名 说明
name 标签名
created_time 创建时间
last_mod_time 修改时间

模型间的关系

模型名称 关联关系
文章 =》分类 多对一
文章 =》 标签 多对多
文章 =》 用户 多对一

1. 为什么要“创建时间”和“最后修改时间”

在设计表时,每条数据都应该有自己的创建时间及修改时间,有些框架例如 Laravel,则会自动管理这两个时间,自动创建这两个字段: created_at & updated_at。

created_time:插入数据时,自动以当前时间作为值入库,last_mod_time:修改数据时,自动以当前时间作为值更新数据库。

在 Django 的 models 中,可以将这两个字段设置成 DateTimeField,在 Django admin 中就会渲染成日期组件。为了能让它们达到上述的效果,可以使用 auto_now_add 以及 auto_now 这两个属性,让它们自动赋值,只在插入数据和修改数据才自动填充。为 DateTimeField 增加这两个属性后,它们将不允许修改,Django admin 中的新增和修改视图均不会渲染它们。而发布时间,则需要我们手动赋值。

2. 文章状态(草稿、发布)

一篇文章,很难一次写完,未写完的文章以及已写完不想发布出来让他人看到的都可以视作“草稿”。也可以衍生出其他状态类型,如:删除等等... ...

3. 关联关系

在文章模型中,用户、分类均以外键关系与之关联,形成文章=》(用户、分类)多对一的关系。分类这块,如果想深究,还能延伸出二级分类,无限级分类等更复杂的功能。文章与标签模型为多对多关系,使用 ManyToManyField,Django 则会为我们自动创建一个 post_tag 关联关系表。

4. 文章编辑器

如果你想使用 Markdown 进行文章的编写,推荐使用 bootstrap-markdown,不过你可能需要自己重构一下图片上传。

如果选择富文本编辑器,推荐使用 django-ckeditor


POST Model


Category Model


Tag Model

展开选填信息