您的位置:首页 > 数据库

Django blog - 03 -创建Django博客博客的数据库模型

2017-09-18 20:18 555 查看
设计博客的数据库表结构 

 

把写好的文章永久地保存在数据库里,当用户访问我们的博客时,Django
就去数据库里把这些数据取出来展现给用户。

 

博客的文章应该含有标题、正文、作者、发表时间等数据

一个更加现代化的博客文章还希望它有分类、标签、评论等

 

博客初级版本主要包含博客文章,文章会有分类以及标签。一篇文章只能有一个分类,但可以打上很多标签。

数据库存储的数据其实就是表格的形式,例如存储博客文章的数据库表长这个样子:

 

文章 id

标题

正文

发表时间

分类

标签

1

title 1

text 1

2016-12-23

Django

Django 学习

2

title 2

text 2

2016-12-24

Django

Django 学习

3

title 3

text 3

2016-12-26

Python

Python 学习

其中文章 ID
是一个数字,唯一对应着一篇文章。

这 3
篇文章的分类和标签都是相同的,这会产生很多重复数据,当数据量很大时就浪费了存储空间。

不同的文章可能它们对应的分类或者标签是相同的,所以我们把分类和标签提取出来,做成单独的数据库表,再把文章和分类、标签关联起来。下面分别是分类和标签的数据库表:

分类 id

分类名

1

Django

2

Python

 

标签 id

标签名

1

Django 学习

2

Python 学习

 

编写博客模型代码

 

以上是自然语言描述的表格,数据库有一套规定的语法来生成上述的表结构,把数据存进去。

Django 把数据库的语法转换成了 Python
的语法形式,只要写Python
代码,Django
会把 Python
代码翻译成对应的数据库操作语言。专业的说,Django
为我们提供了一套 ORM(Object Relational
Mapping)系统。

 

编写 3
个表格:文章(Post)、分类(Category)以及标签(Tag)对应的
Python 类。

模型的代码通常写在相关应用的 models.py
文件里。

Django 内置全部类型文档:https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types

数据库关系文档:https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships

from django.db import models
from django.contrib.auth.model import User

# Create your models here.

class Category(models.Model):

"""
Django    要求模型必须继承 models.Model 类
Category  只需一个简单分类名 name 即可
CharField  指定分类名 name 的数据类型,CharField是字符型
max_length 参数指定最大长度

"""

name = models.CharField(max_length=100)

class Tag(models.Model):
name = models.CharField(max_length=100)

class Post(models.Model):

# 文章标题
title = models.CharField(max_length=70)

# 文章正文

# Textfield 字符型存储大段文本
body = models.TextField()

# 文章创建时间和最后一次更改时间
# DateTimeField 存储时间数据类型
created_time = models.DateTimeField()
modified_time = models.DateTimeField()

# 文章摘要

# CharField 为空报错(blank = True允许空值
excerpt = models.CharField(max_length=200, blank=True)

# 分类与标签

# 一篇文章对应一个分类,一个分类对应多篇文章
# 使用ForeignKey 一对多关系
# 一篇文章对应多个标签,一个标签对应多篇文章
# ManyToManyField 多对多关系
category = models.ForeignKey(Category)
tags = models.ManyToMany(Tag, blank=True)

# 作者

# User 是从 django.contrib.auth.model 导入的
# django.contrib.auth:Django内置应用,处理网站用户注册、登陆等流程
# User 是 Django 写好的用户模型
author = models.ForeignKey(User)


下一篇《Django blog - 04 - Django 翻译:迁移数据库》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: