zoukankan      html  css  js  c++  java
  • 创建Django博客的数据库模型

    声明:此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 models
    2 
    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         如日期时间类型,DateTimeField
    15         整型 IntegerField等等
    16         django 内置的类型全部类型可查看文档:     https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
    17         
    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=True
    44     excerpt = models.CharField(max_length=200, blank=True)
    45 
    46     # 这是分类与标签
    47     # 分类与标签的模型我们已经定义在上面
    48     # 我们在这里把文章对应的数据库表和分类与标签对应的表关联起来
    49     # 但是关联的形式有点不一样。
    50     # 一篇文章一个分类,一个分类可以有多篇文章。
    51     # 所以是一对多的关系,所以使用ForeignKey
    52     category = models.Foreignkey(Category)
    53 
    54     # 对于标签来讲,一个标签下可以有多个文章,一个文章也可以有多个标签
    55     # 所以这是多对多的关系,所以使用MnayToManyField
    56     # 同时一个文章也可以没有标签,所以可以添加一个参数blank=True
    57     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)
  • 相关阅读:
    SGU 271 Book Pile (双端队列)
    POJ 3110 Jenny's First Exam (贪心)
    HDU 4310 Hero (贪心)
    ZOJ 2132 The Most Frequent Number (贪心)
    POJ 3388 Japanese Puzzle (二分)
    UVaLive 4628 Jack's socks (贪心)
    POJ 2433 Landscaping (贪心)
    CodeForces 946D Timetable (DP)
    Android Studio教程从入门到精通
    Android Tips – 填坑手册
  • 原文地址:https://www.cnblogs.com/learnC/p/6733514.html
Copyright © 2011-2022 走看看