Django 快速搭建博客 第三节(数据库表设计)

2023-11-14

上一节我们已经能在pycharm下新建了blog app了, 这个时候,我们需要设计一下博客的数据库设计
  1. 关于数据库表的设计,作为新手的我们并不需要要求懂太多稍微的懂一些也就可以了,毕竟数据库也是需要有一定的功底的,

这里我们依据博客学习,将博客表设计为三份:文章表,标签表,分类表

结构类似于这样子:
文章表.png


分类与标签表.png

图片也是截的,比较丑,这里我按照我个人的理解,说一下:

每一篇文章都有对应的文章id,正文,发表时间,分类,标签
这很合理,我们能理解,但是!每篇文章都有些分类,标签,这样会产生重复的数据,造成资源的浪费,所以我们把分类与标签提取出来,单独做成表,再跟文章相关联起来。这就有了图二的内容。

2 接下来我们开始在blog/models下进行数据库表的创建(注意:因为django使用的orm系统(Object Relational Mapping ))
贴上这里的三个表结构:

from django.db import models

# 专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
from django.contrib.auth.models import User
# Create your models here.


# 分类数据库表
class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

# 标签数据库
class Tag(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

# 文章数据库
class Post(models.Model):
    '''
    文章数据库包含字段:标题title 正文body  创建时间created_time
    修改时间modified_time 摘要excerpt  分类category 标签tag 作者author
    '''
    title = models.CharField(max_length=100)

    body = models.TextField()

    created_time = models.DateTimeField()

    modified_time = models.DateTimeField()

    # blank 为true表示参数可以为空值za
    excerpt = models.CharField(max_length=200,blank=True)

    # ForeignKey,即一对多的关联关系(一个分类下可以有多篇文章)
    category = models.ForeignKey(Category)

    # 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,
    # 所以我们使用 ManyToManyField,表明这是多对多的关联关系。文章可以没有标签,所以blank可以为true
    tag = models.ForeignKey(Tag,blank=True)

    # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
    # django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,
    # User 是 Django 为我们已经写好的用户模型。
    # 这里我们通过 ForeignKey 把文章和 User 关联了起来。
    # 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似
    author = models.ForeignKey(User)

    def __str__(self):
        return self.title

以后有机会会改善代码的显示界面,如果支持的情况下,我们这里再贴上代码的图片

图片.png

图片.png

3 同步数据库:

图片.png

图片.png

如果想知道django是如何操作数据库的,可以使用命令:

图片.png

这里再贴一下使用数据库的命令:

python manage.py makemigrations
python manage.py migrate

当我们看到Applying blog.0001_initial ....ok 就说明同步数据库成功了。

python manage.py sqlmigrate blog 0001

django命令行知识:

1 同步数据库: python manage.py makemigrations
python manage.py migrate

2 查看django如何操作数据库:python manage.py sqlmigrate blog 0001

以上就是建数据库表的设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 快速搭建博客 第三节(数据库表设计) 的相关文章

随机推荐

  • 谢尔平斯基三角形分形 - 产生随机性的最简方法

    1 什么是谢尔平斯基三角形 谢尔平斯基三角形是一组多个 或无限 三角形 看看下面的谢尔平斯基三角形 看看它看起来有多无限 这里的概念是 填充的三角形由中心的空等边三角形填充 使得这个三角形空间与围绕它形成的三个三角形一致 如下图所示 我们将
  • java 二进制对象_Java知识点总结(JDBC-二进制对象的使用)

    Java知识点总结 JDBC 二进制对象的使用 Java知识点总结 Java JDBC BLOB Binary Large Object 用于存储大量的二进制数据 大字段有些特殊 不同数据库处理的方式不一样 大字段的操作常常是以流的方式来处
  • 30、 移动端常用开发框架

    30 移动端常用开发框架 1 框架概述 框架 顾名思义就是一套架构 它会基于自身的特点向用户提供一套较为完整的解决方案 框架的控制权在框架 本身 使用者要按照框架所规定的某种规范进行开发 前端常用的框架有 Bootstrap Vue Ang
  • 数组里面对象去重的3种方法

    数组里面对象去重的方法挺多的 下面列了几种方法任君选择 下面是将要过滤的数据 将arr里面id重复的数据去掉 下面方法中用的arr都是这组数据哦 var arr id 1 name 周瑜1 id 3 name 王昭君1 id 2 name
  • Java虚拟机——运行时数据区

    Java内存区域 一 介绍 Java内存区域不同于Java内存模型 JMM Java内存区域是指 JVM运行时将数据分区域存储 简单的说就是不同的数据放在不同的地方 通常又叫 运行时数据区域 Java内存模型 JMM 定义了程序中各个变量的
  • 【STM32Cube】学习笔记(一):光敏传感器

    文章目录 前言 一 光敏传感器是什么 二 硬件电路设计 三 软件设计 1 CubeMX配置 2 CubeIDE代码 3 结果显示 总结 附录 前言 本篇文章用STM32CubeMX和STM32CubeIDE软件编程 主控芯片为STM32F4
  • OpenSSH 用户枚举漏洞(CVE-2018-15473)修复

    1 漏洞描述 漏洞名称 OpenSSH 用户枚举漏洞 CVE 2018 15473 原理扫描 详细描述 OpenSSH OpenBSD Secure Shell 是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具 该工具是S
  • 你还不会AVL树吗?

    AVL树 AVL树概念 AVL树的插入 结点定义 插入流程 左单旋 右单旋 左右双旋 右左双旋 验证AVL树 AVL树概念 AVL树是一颗平衡的二叉搜索树 所谓平衡是指左右子树的高度差的绝对值不超过1 所以一颗AVL树 如果不是空树 有以下
  • postman设置等待时间最简单方法

    一 最简洁方法 设置等待5秒 setTimeout function 5000 发送请求之前等待5秒
  • 如何对List(Map)进行Stream排序

    public void sortLastOnlineList CloudRInfoPo cloudRInfoPo List
  • 【JAVA】使用intellij IDEA将项目打包为jar包

    当你有一个能正常编译的项目 以springboot为例 有两步步骤 打包配置 打包 一 打包配置 1 点击右上角快捷按钮 文件 gt 项目结构 打开项目结构设置 2 项目结构 gt Artifacts 如图所示选择 3 在Create JA
  • DS18B20温度传感器模块介绍及与USART HMI通信

    一 DS18B20温度传感器 DS18B20是常用的数字温度传感器 其输出的是数字信号 具有体积小 硬件开销低 抗干扰能力强 精度高的特点 DS18B20数字温度传感器接线方便 封装成后可应用于多种场合 如管道式 螺纹式 磁铁吸附式 不锈钢
  • 算法分析与设计编程题 动态规划

    矩阵连乘 题目描述 解题代码 void printOptimalParens vector
  • INSTANCE 2022数据集

    论文链接 https arxiv org abs 2301 03281 数据集链接 Home Grand Challenge github baseline GitHub PerceptionComputingLab INSTANCE202
  • 陷波器介绍_50Hz工频信号陷波器设计

    文章目录 学习目标 基本概念 基本原理 参数的具体计算及选择 具体计算 陷波器的意义 学习目标 了解陷波器的基本概念 掌握50HZ工频陷波器的基本电路图 基本概念 提示 这里可以添加要学的内容 例如 1 陷波器的基本概念 陷波器是一种谐振电
  • Java中的 + 运算符和 += 运算符

    通过几个小实例来理解Java中的 运算符 首先运算符都要从左往右进行计算 字符串旁边的 号的含义是拼接 字符旁边的 号的含义是ASCII码相加 System out println a System out println a 1 a是ch
  • 第十章 Oracle恢复内部原理(各式各样的恢复特性)

    10 1 并行恢复 v7 1 并行恢复的目标是用计算和I O的并行机制减少崩溃恢复 单实例恢复和介质恢复的时间 当多个磁盘上多个数据文件同时进行恢复时能有效的降低恢复时间 10 1 1 并行恢复架构 并行恢复分区做两件事 1 读重做日志 2
  • spring BeanCreationException

    一般出现这样的错误 日志打印很长 稍微不注释加上失去耐心 就会查询问题很久 spring一般报错误都是由上到下的进行提示 比如a调用b b调用c c调用d d有问题 一般看到的日志时a b c d这样大概的顺序描述 例如 Caused by
  • pip install -r requirements.txt出现错误时........

    只需要把pip install r requirements txt后加入替换网址即可 安装需要的库的时候建议使用清华源 这样更快 使用下面的指令就可以使用清华源下载了 pip install r requirements txt i ht
  • Django 快速搭建博客 第三节(数据库表设计)

    上一节我们已经能在pycharm下新建了blog app了 这个时候 我们需要设计一下博客的数据库设计 关于数据库表的设计 作为新手的我们并不需要要求懂太多稍微的懂一些也就可以了 毕竟数据库也是需要有一定的功底的 这里我们依据博客学习 将博