1、现在就来创建我们的 Django 博客应用,我把它命名为 blog。激活虚拟环境,进入到 manage.py 文件所在的目录下,运行 python manage.py startapp blog 命令即可建立一个 blog 应用

aaarticlea/png;base64,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" alt="" />

这个应用的文件夹结构 Django 已经为我们建立好了,但它还只是包含各种文件的一个文件夹而已,Django 目前还不知道这是一个应用。我们得告诉 Django 这是我们建立的应用,专业一点说就是在 Django 的配置文件中注册这个应用。打开 blogproject\ 目录下的 settings.py 文件,看名字就知道 settings.py 是一个设置文件(setting 意为设置),找到 INSTALLED_APPS 设置项,将 blog 应用添加进去。

2、数据库模型

博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库。我们把写好的文章永久地保存在数据库里,当用户访问我们的博客时,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 学习

blog/models.py
# coding: utf-8
from django.db import models
from django.contrib.auth.models import User class Category(models.Model):
"""
Django 要求模型必须继承 models.Model 类。
Category 只需要一个简单的分类名 name 就可以了。
CharField 指定了分类名 name 的数据类型,CharField 是字符型,
CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。
当然 Django 还为我们提供了多种其它的数据类型,如日期时间类型 DateTimeField、整数类型 IntegerField 等等。
Django 内置的全部类型可查看文档:
https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
"""
name = models.CharField(max_length=100) class Tag(models.Model):
"""
标签 Tag 也比较简单,和 Category 一样。
再次强调一定要继承 models.Model 类!
"""
name = models.CharField(max_length=100) class Post(models.Model):
"""
文章的数据库表稍微复杂一点,主要是涉及的字段更多。
""" # 文章标题
title = models.CharField(max_length=70) # 文章正文,我们使用了 TextField。
# 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。
body = models.TextField() # 这两个列分别表示文章的创建时间和最后一次修改时间,存储时间的字段用 DateTimeField 类型。
created_time = models.DateTimeField()
modified_time = models.DateTimeField() # 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。
# 指定 CharField 的 blank=True 参数值后就可以允许空值了。
excerpt = models.CharField(max_length=200, blank=True) # 这是分类与标签,分类与标签的模型我们已经定义在上面。
# 我们在这里把文章对应的数据库表和分类、标签对应的数据库表关联了起来,但是关联形式稍微有点不同。
# 我们规定一篇文章只能对应一个分类,但是一个分类下可以有多篇文章,所以我们使用的是 ForeignKey,即一对多的关联关系。
# 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。
# 同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True。
# 如果你对 ForeignKey、ManyToManyField 不了解,请看教程中的解释,亦可参考官方文档:
# https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
category = models.ForeignKey(Category)
tags = models.ManyToManyField(Tag, blank=True) # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
# django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
# 这里我们通过 ForeignKey 把文章和 User 关联了起来。
# 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
author = models.ForeignKey(User)

理解多对一和多对多两种关联关系

我们分别使用了两种关联数据库表的形式:ForeignKey 和 ManyToManyField。

ForeignKey

ForeignKey 表明一种一对多的关联关系。比如这里我们的文章和分类的关系,一篇文章只能对应一个分类,而一个分类下可以有多篇文章。反应到数据库表格中,它们的实际存储情况是这样的:

文章 ID 标题 正文 分类 ID
1 title 1 body 1 1
2 title 2 body 2 1
3 title 3 body 3 1
4 title 4 body 4 2
分类 ID 分类名  
1 Django  
2 Python  

可以看到文章和分类实际上是通过文章数据库表中 分类 ID 这一列关联的。当要查询文章属于哪一个分类时,只需要查看其对应的分类 ID 是多少,然后根据这个分类 ID 就可以从分类数据库表中找到该分类的数据。例如这里文章 1、2、3 对应的分类 ID 均为 1,而分类 ID 为 1 的分类名为 Django,所以文章 1、2、3 属于分类 Django。同理文章 4 属于分类 Python。

反之,要查询某个分类下有哪些文章,只需要查看对应该分类 ID 的文章有哪些即可。例如这里 Django 的分类 ID 为 1,而对应分类 ID 为 1 的文章有文章 1、2、3,所以分类 Django 下有 3 篇文章。

希望这个例子能帮助你加深对多对一关系,以及它们在数据库中是如何被关联的理解,更多的例子请看文末给出的 Django 官方参考资料。

ManyToManyField

ManyToManyField 表明一种多对多的关联关系,比如这里的文章和标签,一篇文章可以有多个标签,而一个标签下也可以有多篇文章。反应到数据库表格中,它们的实际存储情况是这样的:

文章 ID 标题 正文
1 title 1 body 1
2 title 2 body 2
3 title 3 body 3
4 title 4 body 4
标签 ID 标签名
1 Django 学习
2 Python 学习
文章 ID 标签 ID
1 1
1 2
2 1
3 2

多对多的关系无法再像一对多的关系中的例子一样在文章数据库表加一列 分类 ID 来关联了,因此需要额外建一张表来记录文章和标签之间的关联。例如文章 ID 为 1 的文章,既对应着 标签 ID 为 1 的标签,也对应着 标签 ID 为 2 的标签,即文章 1 既属于标签 1:Django 学习,也属于标签 2:Python 学习。

反之,标签 ID 为 1 的标签,既对应着 文章 ID 为 1 的文章,也对应着 文章 ID 为 2 的文章,即标签 1:Django 学习下有两篇文章。

希望这个例子能帮助你加深对多对多关系,以及它们在数据库中是如何被关联的理解,更多的例子请看文末给出的 Django 官方参考资料

建立django博客应用及数据库模型的更多相关文章

  1. django博客项目2.建立 Django 博客应用

    建立博客应用 我们已经建立了 Django 博客的项目工程,并且成功地运行了它.不过到目前为止这一切都还只是 Django 为我们创建的项目初始内容,Django 不可能为我们初始化生成博客代码,这些 ...

  2. Django 博客开发教程目录索引

    Django 博客开发教程目录索引 本项目适合 0 基础的 Django 开发新人. 项目演示地址:Black & White,代码 GitHub 仓库地址:zmrenwu/django-bl ...

  3. django博客项目3:创建 Django 博客的数据库模型

    设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库.我们把写好的文章永久地保存在数据库里,当用户访问我们的博客 ...

  4. HelloDjango 系列教程:创建 Django 博客的数据库模型

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个 ...

  5. Django1.8教程——从零开始搭建一个完整django博客(一)

    第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...

  6. django博客项目5:博客首页视图(2)

    真正的 Django 博客首页视图 在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅 ...

  7. Django 博客单元测试:测试评论应用

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 评论应用的测试和博客应用测试的套路是一样的. 先来建立测试文件的目录结构.首先在 c ...

  8. 使用Github建立个人博客

    总的说来 这个当有node.js 和gitbub的账号后,搭建一个自己的博客,想想还是挺美的事! 由于要把整个流程说清楚 估计lz还没这个实力,所以都是继承前辈们的经验,自己再添加一点遇到的问题和解决 ...

  9. 使用Dropbox+Justwriting+Markdown建立个人博客

    使用Dropbox+Justwriting+Markdown建立个人博客,让您真正体会到什么是"简化". 您的博客所有日志存储在您的PC上.即使有一天你的server主机挂了,你的 ...

随机推荐

  1. Web项目之Django基础

    Django目录: python项目Django(web服务) python项目Django(HTTP协议) python项目Django(Django的安装与使用) python项目Django(U ...

  2. spfa模板+讲解

    zz http://blog.sina.com.cn/s/blog_6ad20aef0100mc1a.html Spfa算法 (模板源代码) 这是Bellman Ford的改进算法.    算法介绍: ...

  3. h5快速制作工具-企业级. 非个人无水印

    Epub360 Epub是团队引入的专业级H5应用开发工具,能够快速制作出高质量的H5运营交互页面,具有动画控制.交互设定.社交应用和数据应用的特点,其制作过程就类似于制作一个PPT,比较容易上手. ...

  4. shell脚本,录制和回放终端的小工具script。

    action.log和time.log这两个配置文件被当做script命令的参数.这两个文件可以随便命名.这里用time.log和action.log.其中time.log用于存储时序信息,描述每一个 ...

  5. 二. python函数与模块

    第四章.内置函数与装饰器详解 1.内置函数补充1 注:红色圆圈:必会:  紫红色方框:熟练:   绿色:了解 callable() 判断函数是否可以被调用执行 def f1(): pass f1() ...

  6. ios之UIPopoverController

    UIPopoverController是iPad上的iOS开发会常用到的一个组件(在iPhone设备上不允许使用),这个组件上手很简单,因为他的显示方法很少,而且参数简单,但我在使用过程中还常碰到各种 ...

  7. js最高效的数组去重方法

    var arr=[1,2,33,2,4,5,33,5,7,8,1,3];var result=[];var temp={};for( var i=0;i<arr.length;i++){ if( ...

  8. mongodb详细教程

    转自:https://www.cnblogs.com/liruihuan/tag/MongoDB/

  9. 【Java_基础】Java内部类详解

    1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...

  10. element使用心得

    Table Table 常用属性解释 数据过滤,filter过滤器 <el-table-column width="200" show-overflow-tooltip la ...