Django个人博客搭建(1)-创建Model
作者: admin 2019-08-23 20:22:24 阅读(75) 评论(0)一. 前言
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 和 article。
二. 模型介绍
学习过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,两者关系为外键关系。
- 我们在article该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命令,该命令的作用是读取数据库迁移文件,执行迁移,将模型类和数据库同步。