Django搭建博客记录 - Part 2
分类:
入门到放弃
日期: 2024-03-08 | 作者: admin
| 浏览:
335
能正常启动Django应用和访问首页后,我们要开始着手博客的后续搭建。
1. 博客数据模型
一般博客会包含文章分类、文章标签、文章详情、友情链接等,每个文章也会有对应的分类,还会有相应的标签,然后文章详情还会包含标题、作者、发布时间、浏览量等等信息。
Django的Model就是处理这些的,用更加专业一点的说法,就是 Django 为我们提供了一套 ORM(Object Relational Mapping)系统。我们只需要在Model里用Python语言定义各数据结构,Django会自动处理转换为相应的表机构。
# blog/model.py
from django.db import models
# 文章分类
class Category(models.Model):
# 文章分类的一个属性,即后续数据库中会有一列name,代表分类名称
name = models.CharField('文章分类', max_length=50)
# 嵌套类主要是细化功能,例如verbose_name定义显示名称,verbose_name_plural是复数形式,若不指定的话,会自动加s,db_table指定数据库表的名称
class Meta:
verbose_name = '文章分类'
verbose_name_plural = verbose_name
db_table = 'blog_category'
# 定义字符串表现形式,打印或返回时,可以更直观
def __str__(self):
return self.name
Django有各种数据类型,例如文本(CharField)、数值(IntegerField)、布尔(BooleanField)等等各种类型,具体可以参考官方文档:https://docs.djangoproject.com/zh-hans/5.0/ref/models/fields/
2. 完整数据模型
# blog/models.py
from django.db import models
from django.utils import timezone
# Create your models here.
# 文章分类
class Category(models.Model):
name = models.CharField('文章分类', max_length=50)
class Meta:
verbose_name = '文章分类'
verbose_name_plural = verbose_name
db_table = 'blog_category'
def __str__(self):
return self.name
# 文章标签
class Tag(models.Model):
name = models.CharField('文章标签', max_length=50, unique=True)
class Meta:
verbose_name = '文章标签'
verbose_name_plural = verbose_name
db_table = 'blog_tag'
def __str__(self):
return self.name
# 文章详情
class Article(models.Model):
title = models.CharField('标题', max_length=100)
# 一对一,即每篇文章只有一个对应分类
category = models.ForeignKey('Category', verbose_name='类别', on_delete=models.CASCADE)
# 一对多,即每篇文章可以有多个标签
# blank=True 表示文章可以没有标签
tag = models.ManyToManyField('Tag', verbose_name='标签', blank=True)
content = models.TextField(verbose_name='详情')
# 默认为当前时间
publish_time = models.DateField('发布时间', default=timezone.now)
# default 可以设置默认值
author = models.CharField('作者', max_length=50, default='admin')
hits = models.PositiveIntegerField('浏览量', default=0)
# Python中的布尔判断: True == 1, False == 0
state = models.BooleanField('状态', default=1)
class Meta:
verbose_name = '文章列表'
verbose_name_plural = verbose_name
db_table = 'blog_article'
ordering = ('-publish_time',)
def __str__(self):
return self.title
# 浏览量自增
def raise_hits(self):
self.hits += 1
# 更新浏览量
self.save(update_fields=['hits'])
# 友情链接
class Link(models.Model):
name = models.CharField('友链名称', max_length=50)
# URLField,自带URL检测功能,max_length默认为200
url = models.URLField('地址')
class Meta:
verbose_name = '友链列表'
verbose_name_plural = verbose_name
db_table = 'blog_link'
def __str__(self):
return self.name
3. 真正的ORM
模型定义好后,需要使用manage命令,执行数据模型迁移到数据库表,即实现真正的ORM
# 生成数据库迁移文件,但还未迁移到数据库表
python manage.py makemigrations
# 执行迁移操作,执行完后,可以查看数据库表,就有相应的表及字段内容
python manage.py migrate
4. 数据库选择
Django支持 PostgreSQL、MariaDB、MySQL、Oracle 和 SQLite 等,默认的是 SQLite3,一般的个人博客使用其实也够够的了。如需其他数据库,需在 setting.py 中配置相应数据库引擎及数据库信息等。
# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
相关文章