声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用

blog最主要的功能就是展示我们写的文章,它需要从某个地方获取我们写的文章数据才能显示,通常就是从数据库获取,当用户访问我们的blog时,django就从数据库中取出来展现给用户

博客的文章应该有标题,正文,作者,发表时间等数据,并且具有分类,标签,评论等功能,为了更好的存储这些数据,我们需要合理的组织我们的数据库表的结构

一个id对应唯一一个文章,但是这个数据库表不理想,有很多重复的数据,标签和分类有很多都是相同的,所以要分开做成单独的数据库表,需要用的时候关联起来就可以了,例如

数据库和编程语言一样,有自己的语法生成上面的表格结构,这样我们才能把数据存储进去,一般情况下我们需要学习一下SQL语言,但是django可以不必要,因为它已经帮你做了这些事情,把数据库的语法转换成了Python的语法形式,专业点讲就是django为我们提供了一套ORM(Object Relational Mapping)系统,比如说我们的分类数据库表,django要求我们这样写

在blog/models.py下写:

 from django.db import models

 # Create your models here.

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

这是一个标准的Python类,我们继承了models.Model类,类名是Category,里面有一个name属性,是models.CharField的一个实例,这样django就可以把这个类翻译成数据库的语法,在数据库里为我们创建一个名为category的table,这个table里有一个字段叫name,还有一个id字段自动为我们创建。简单点的规则讲就是。一个类对应一个table,一个属性对应一个字段。我们需要三个表格,文章Post,分类Category以及标签Tag,下面就来创建他们,blog/models.py,代码中有注释

 from django.db import models
from django.contrib.auth.models import User # 分类表
class Category(models.Model):
"""
django 要求我们必须继承 models.Model类
Category 只需要一个简单的分类名 name 就可以了。
CharField 指定了 name 的数据类型,字符型 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):
name = models.CharField(max_length=70) # 文章表
class Post(models.Model):
# 文章标题
title = models.CharField(max_length=70) # 文章正文,使用了TextField类型
# 比较段的字符串使用CharField,但是文章正文肯定很长一段文本
# 因此使用TextField来存储大段文本
body = models.TextField() # 这两个列表示文章的创建时间和最后修改时间
create_time = models.DateTimeField()
modified_time= models.DateTimeField() # 文章摘要,可以没有文章摘要
# 但默认情况下CharField必须要存入数据,否则会报错,
# 要避免可以在参数中加入blank=True
excerpt = models.CharField(max_length=200, blank=True) # 这是分类与标签
# 分类与标签的模型我们已经定义在上面
# 我们在这里把文章对应的数据库表和分类与标签对应的表关联起来
# 但是关联的形式有点不一样。
# 一篇文章一个分类,一个分类可以有多篇文章。
# 所以是一对多的关系,所以使用ForeignKey
category = models.Foreignkey(Category) # 对于标签来讲,一个标签下可以有多个文章,一个文章也可以有多个标签
# 所以这是多对多的关系,所以使用MnayToManyField
# 同时一个文章也可以没有标签,所以可以添加一个参数blank=True
tags = models.MnayToManyField(Tag, blank=True) # 文章作者,这里的User是从django.contrib.auth.midels 导入的
# django.contrib.auth 是django内置的应用
# 专门用于处理网站用户的注册,登录等流程
# User 是 django为我们写好的用户模型
# 这里通过ForeignKey 把文章和 User 关联起来
# 因为文章和作者是一对多的关系
author = models.ForeignKey(User)

创建Django博客的数据库模型的更多相关文章

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

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

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

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

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

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

  4. 建立django博客应用及数据库模型

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

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

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

  6. 使用 Nginx 和 Gunicorn 部署 Django 博客(转)

    原文:http://zmrenwu.com/post/20/  http://www.siar.me/post/9/ 针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian ...

  7. Django博客开发实践,初学者开发经验

    python,Django初学者,开发简易博客,做了一下笔记,记录了开发的过程,功力浅薄,仅供初学者互相 交流,欢迎意见建议.具体链接:Django博客开发实践(一)--分析需求并创建项目 地址:ht ...

  8. django博客项目6:Django Admin 后台发布文章

    在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 ...

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

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

随机推荐

  1. .NET面试题汇总

    目录 本次给大家介绍的是我收集以及自己个人保存一些.NET面试题 简介 1.C# 值类型和引用类型的区别 2.如何使得一个类型可以在foreach 语句中使用 3.sealed修饰的类有什么特点 4. ...

  2. Runtime.getRuntime().exec()----记录日志案例

    Runtime.getRuntime().exec()方法主要用于运行外部的程序或命令. Runtime.getRuntime().exec共同拥有六个重载方法: 1.public Process e ...

  3. ARM内核和架构

    转:深入浅谈,CPU设计原理          CPU的内部架构和工作原理 推荐一本书:编码的奥秘 一.ARM内核和架构 ARM产品越来越丰富,命名也越来越多.很多朋友提问: ARM内核和架构都是什么 ...

  4. 一个简单的HTML5摇一摇实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  5. python sax解析xml

    #books.xml<catalog> <book isbn="0-596-00128-2"> <title>Python & XML& ...

  6. ThinkPHP3.1在多数据库连接下存储过程调用bug修正

    最近使用ThinkPHP3.1进行一个项目的开发,由于该项目需要连接多台不同的数据库,所以使用如下配置方法: <?php return array( //'配置项'=>'配置值' //数据 ...

  7. 【WPF学习笔记】之如何传递第一个登录界面的值到下一个页面显示:动画系列之(三)

    ... ... 承接系列(二) 在之前的登录后台已设置发送到主界面: 在主界面接收传递的值: using System; using System.Collections.Generic; using ...

  8. linux memcached php 整合

    http://blog.csdn.net/liruxing1715/article/details/8269563

  9. 基于zookeeper或redis实现分布式锁

    前言 在分布式系统中,分布式锁是为了解决多实例之间的同步问题.例如master选举,能够获取分布式锁的就是master,获取失败的就是slave.又或者能够获取锁的实例能够完成特定的操作. 目前比较常 ...

  10. python 基础 9.3 mysql 数据操作

    #/usr/bin/python #coding=utf-8 #@Time   :2017/11/21 0:20 #@Auther :liuzhenchuan #@File   :mysql 数据操作 ...