Django 个人博客搭建 (1)- 创建模型

本贴最后更新于 1900 天前,其中的信息可能已经事过景迁

一. 前言

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_blogadmin_blog

二. 模型介绍

学习过 Java 的小伙伴都知道实体类,而在 Django 中,实体类又称 model(模型类)。

  • 每一个模型类对应着数据库中的一张表。

  • 模型类中的每一个字段恰好对应着表中的一个字段。

  • 下列是一些常用的模型字段。

类型 说明
IntegerField 整数字段
AutoField 能够根据 ID 自增的 IntegerField
BooleanField 真/假(true/false)字段
CharField 字符串字段,适用于中小长度的字符串。对于长段的文字,请使用 TextField
DateField 日期字段
DateTimeField 时间日期字段
FileField 文件上传字段
FloatField 浮点数字段
ImageField 类似于 FileField,是上传图片字段。
TextField 长文本字段

三. 编写模型字段

博客中最重要的模型就是文章模型了,一个文章模型包含文章标题、内容、分类、标签、作者、创建时间、修改时间。

但是模型之间的关系并不止这一些,因为一个分类可以对应多篇文章,所以分类与文章是一对多关系,这在 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 命令,该命令的作用是读取缓存文件,将模型类的变动转换成数据表的变动,将模型类和数据库同步。

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    541 引用 • 672 回帖 • 1 关注
  • Django
    47 引用 • 72 回帖 • 4 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...