博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建Django博客的数据库模型
阅读量:6757 次
发布时间:2019-06-26

本文共 2840 字,大约阅读时间需要 9 分钟。

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

 

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

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

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

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

在blog/models.py下写:

1 from django.db import models2 3 # Create your models here.4 5 6 class Category(models.Model):7     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,代码中有注释

1 from django.db import models 2 from django.contrib.auth.models import User 3  4 # 分类表 5 class Category(models.Model): 6     """     7         django 要求我们必须继承 models.Model类 8         Category 只需要一个简单的分类名 name 就可以了。 9         CharField 指定了 name 的数据类型,字符型10     11         max_length 指定其最大长度,超过这个长度就不能被存入数据库12         13         当然django还为我们提供了各种各样的类型。14         如日期时间类型,DateTimeField15         整型 IntegerField等等16         django 内置的类型全部类型可查看文档:     https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types17         18     """19     name = models.CharField(max_length=100)      20 21 22 # 标签表23 class Tag(models.Model):24     name =  models.CharField(max_length=70)25 26 27 # 文章表28 class Post(models.Model):29     # 文章标题30     title = models.CharField(max_length=70)31     32     # 文章正文,使用了TextField类型33     # 比较段的字符串使用CharField,但是文章正文肯定很长一段文本34     # 因此使用TextField来存储大段文本35     body = models.TextField()36     37     # 这两个列表示文章的创建时间和最后修改时间38     create_time = models.DateTimeField()39     modified_time= models.DateTimeField()40 41     # 文章摘要,可以没有文章摘要42     # 但默认情况下CharField必须要存入数据,否则会报错,43     # 要避免可以在参数中加入blank=True44     excerpt = models.CharField(max_length=200, blank=True)45 46     # 这是分类与标签47     # 分类与标签的模型我们已经定义在上面48     # 我们在这里把文章对应的数据库表和分类与标签对应的表关联起来49     # 但是关联的形式有点不一样。50     # 一篇文章一个分类,一个分类可以有多篇文章。51     # 所以是一对多的关系,所以使用ForeignKey52     category = models.Foreignkey(Category)53 54     # 对于标签来讲,一个标签下可以有多个文章,一个文章也可以有多个标签55     # 所以这是多对多的关系,所以使用MnayToManyField56     # 同时一个文章也可以没有标签,所以可以添加一个参数blank=True57     tags = models.MnayToManyField(Tag, blank=True)58   59     # 文章作者,这里的User是从django.contrib.auth.midels 导入的60     # django.contrib.auth 是django内置的应用61     # 专门用于处理网站用户的注册,登录等流程62     # User 是 django为我们写好的用户模型63     # 这里通过ForeignKey 把文章和  User 关联起来64     # 因为文章和作者是一对多的关系65     author = models.ForeignKey(User)

 

转载于:https://www.cnblogs.com/learnC/p/6733514.html

你可能感兴趣的文章
我的友情链接
查看>>
MySql中 delimiter 详解
查看>>
浏览器history操作实现一些功能
查看>>
你那么喜欢看”干货“,是因为你根本不想下功夫。
查看>>
软件测试用例
查看>>
python mysql 单表查询 多表查询
查看>>
android handler概念解释
查看>>
eclipse代码左虚线对齐设置
查看>>
C中的sizeof
查看>>
插入排序的Java代码实现
查看>>
Spring整合Web开发
查看>>
在SContruct中编译.c
查看>>
让ubuntu开启ssh服务以及让vi/vim正常使用方向键与退格键
查看>>
简易时间序列分析的方法总结(R实现)
查看>>
10.两个链表的交叉
查看>>
Visio Premium 2010密钥+破解激活方法
查看>>
JEE , EJB概念深入概括
查看>>
socket通信简单介绍
查看>>
Unity3D逻辑热更新,第二代舒爽解决方案,L#使用简介
查看>>
状态码表
查看>>