当前位置: 首页 > 教程 > 博客搭建

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

作者: admin 2019-08-23 20:22:24 阅读(311) 评论(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—— frontarticle

二. 模型介绍

学习过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,两者关系为外键关系。

  • 我们在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命令,该命令的作用是读取数据库迁移文件,执行迁移,将模型类和数据库同步。

0 条评论