一. 前言
1. 教程适合人群
-
做这个教程初衷是分享自己的搭建博客心得,可能教程不是那么令人满意,希望网友能体谅,若有不足或者错误之处可以在文章下方留言,我会及时更正。
-
为了写这个教程我会从一个小的 demo 一步步开始,尽可能地把构建博客网站的基本流程详细地描述出来,确保给出的代码无缺漏,能够正常运行,同时将 demo 上传至 github。
2. 注意
-
这是一个关于如何利用 Django 来搭建个人博客的教程系列,开始教程之前,请确保你已经在电脑中安装好了 python 环境,Django 环境,并已经成功建立一个可以正常运行的 Django 项目。
-
如何建立 Django 项目在另一篇博文如何在 PyCharm 中新建一个 Django 项目有具体介绍。如何在 Django 中新建 App 可以参看我的另外一篇博文如何在 Django 中新建一个 App,连接 Mysql 数据库,并获取数据。。
-
教程所采用的 Django 版本为 2.2,python 环境为 3.6,系统环境为 windows10,IDE 为 PyCharm,请尽量保持 django 和 python 版本一致。因为 Django 在 2.0 之后有一些改动,部分代码和 1.0 版本不兼容。
3. 开始之前
已在本地创建了一个名称为 rainbow_blog 的 Django 项目,并在该项目下新建了两个 app—— front_blog 和 admin_blog。
二. 模型介绍
学习过 Java 的小伙伴都知道实体类,而在 Django 中,实体类又称 model(模型类)。
-
每一个模型类对应着数据库中的一张表。
-
模型类中的每一个字段恰好对应着表中的一个字段。
-
下列是一些常用的模型字段。
类型 | 说明 |
---|---|
IntegerField | 整数字段 |
AutoField | 能够根据 ID 自增的 IntegerField |
BooleanField | 真/假(true/false)字段 |
CharField | 字符串字段,适用于中小长度的字符串。对于长段的文字,请使用 TextField |
DateField | 日期字段 |
DateTimeField | 时间日期字段 |
FileField | 文件上传字段 |
FloatField | 浮点数字段 |
ImageField | 类似于 FileField,是上传图片字段。 |
TextField | 长文本字段 |
- 更详细的模型字段介绍可以参考 Django 官方文档中关于模型字段的说明。
三. 编写模型字段
博客中最重要的模型就是文章模型了,一个文章模型包含文章标题、内容、分类、标签、作者、创建时间、修改时间。
但是模型之间的关系并不止这一些,因为一个分类可以对应多篇文章,所以分类与文章是一对多关系,这在 Django 的模型中是 ForeignKey 关系(外键关系);而一篇文章可以对应多个标签,这在 Django 模型中是 ManyToMany 关系(多对多关系)。
因此我们可以将模型拆分,分为文章模型 Article,分类模型 Category,标签模型 Label 和用户模型 User。文章模型 Article 中包含标签 Label 模型,两者关系为外键关系;分类模型 Category 中包含标签 Label 模型,两者为多对多关系;文章模型 Article 中包含用户模型 User,两者关系为外键关系。
- 我们在 admin_blog 该 APP 下的 models.py 中,新建文章模型类 Article,分类模型类 Category,标签模型类 Label。具体代码如下:
# Create your models here.
from django.conf import settings
from django.db import models
# 文章模型类
class Article(models.Model):
id = models.BigAutoField(primary_key=True) # 主键
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) # 与自带的auth.user关联
label = models.ManyToManyField('Label') # Label和Article为多对多关系
title = models.CharField(max_length=100) # 标题
content = models.TextField(max_length=100000) # 内容
summary = models.CharField(max_length=200) # 摘要
gmt_created = models.DateTimeField(blank=True, null=True, auto_now_add=True) # 创建时间
gmt_modified = models.DateTimeField(blank=True, null=True, auto_now=True) # 修改时间
# 分类模型类
class Category(models.Model):
id = models.BigAutoField(primary_key=True)
category_name = models.CharField(max_length=32) # 分类名
gmt_created = models.DateTimeField(blank=True, null=True, auto_now_add=True) # auto_now_add为添加时的时间,更新对象时不会有变动。
gmt_modified = models.DateTimeField(blank=True, null=True, auto_now=True) # auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
# 标签模型类
class Label(models.Model):
id = models.BigAutoField(primary_key=True)
label_name = models.CharField(max_length=32) # 标签名
category = models.ManyToManyField('Category') # Label和Category是多对多关系
gmt_created = models.DateTimeField(blank=True, null=True, auto_now_add=True) # auto_now_add为添加时的时间,更新对象时不会有变动。
gmt_modified = models.DateTimeField(blank=True, null=True, auto_now=True) # auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
四. 生成数据表
-
我们在第三步中只创建了模型类,并没有在数据库中创建表。
-
我们需要进入项目根目录,先执行
python manage.py makemigrations
命令行,该命令行的作用是将模型类的变动生成相应的缓存文件。
-
然后再执行
python manage.py migrate
命令,该命令的作用是读取缓存文件,将模型类的变动转换成数据表的变动,将模型类和数据库同步。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于