建立django博客应用及数据库模型
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博客应用及数据库模型的更多相关文章
- django博客项目2.建立 Django 博客应用
建立博客应用 我们已经建立了 Django 博客的项目工程,并且成功地运行了它.不过到目前为止这一切都还只是 Django 为我们创建的项目初始内容,Django 不可能为我们初始化生成博客代码,这些 ...
- Django 博客开发教程目录索引
Django 博客开发教程目录索引 本项目适合 0 基础的 Django 开发新人. 项目演示地址:Black & White,代码 GitHub 仓库地址:zmrenwu/django-bl ...
- django博客项目3:创建 Django 博客的数据库模型
设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库.我们把写好的文章永久地保存在数据库里,当用户访问我们的博客 ...
- HelloDjango 系列教程:创建 Django 博客的数据库模型
文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个 ...
- Django1.8教程——从零开始搭建一个完整django博客(一)
第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...
- django博客项目5:博客首页视图(2)
真正的 Django 博客首页视图 在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅 ...
- Django 博客单元测试:测试评论应用
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 评论应用的测试和博客应用测试的套路是一样的. 先来建立测试文件的目录结构.首先在 c ...
- 使用Github建立个人博客
总的说来 这个当有node.js 和gitbub的账号后,搭建一个自己的博客,想想还是挺美的事! 由于要把整个流程说清楚 估计lz还没这个实力,所以都是继承前辈们的经验,自己再添加一点遇到的问题和解决 ...
- 使用Dropbox+Justwriting+Markdown建立个人博客
使用Dropbox+Justwriting+Markdown建立个人博客,让您真正体会到什么是"简化". 您的博客所有日志存储在您的PC上.即使有一天你的server主机挂了,你的 ...
随机推荐
- js 上传图片
<div class="block-input" style="height: 90px"> <span><i class=&qu ...
- Django ORM 查询操作
queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象 ...
- linux yum 安装mysql
1.安装查看有没有安装过: yum list installed MySQL* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安装mysql客户端: ...
- shell脚本,awk实现每个数字加1.
[root@localhost add]# cat file [root@localhost add]# cat file|awk '{for(i=1;i<=NF;i++){$i+=1}}1' ...
- UIViewAnimationOptions
常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:执行UIView动画时,自动更新Subview的Layout约束.. UIView ...
- 导出Excel插件——Export-CSV ---20150610
出处:http://bbs.hcharts.cn/thread-99-1-1.html 导出Excel插件——Export-CSV 一.插件信息 插件名:Export-CSV(导出Execl文件) ...
- CF-1072-C. Cram Time(贪心,数学)
CF-1072-C. Cram Time http://codeforces.com/contest/1072/problem/C 题意: 第一天有 a 小时,第二天有 b 小时.第 k 个任务需要 ...
- Git学习——撤销修改
git checkout -- <file> 当你修改完一个工作区的文件后,使用git status查看当前的状态.其中有说明,接下来你可以git add <file> 去添加 ...
- tkinter学习-滚动条
阅读目录 Listbox 以列表的形式显示 Scrollbar 滚动条 Scale 更滚动条很相似,但更精准 Listbox: 说明:列表框控件,在Listbox窗口小部件是用来显示一个字符串列表给 ...
- PHP方法之 substr
简单描述: substr 主要用于字符串的截取,但是不适用于中文字符串,易出现乱码,中文字符串可使用mbstring. 方法申明: substr(string,start,length) string ...