Django学习(三)—APP及models

在上一篇文章当中,我们介绍了怎样更换默认的数据库,以及迁移数据,在本文当中,我们去创建我们自己的APP(应用)以及书写models。

本文以一个简单的问题收集demo为例介绍App,以及创建models

Django学习(三)—APP及models_第1张图片
Django

一、APP?

那么什么是APP呢?,我们来看一下官方文档中对APP的解释:

项目 vs. 应用
项目和应用之间有什么不同? 应用是一个Web应用程序,它完成具体的事项 —— 比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。 项目是一个特定网站中相关配置和应用的集合。一个项目可以包含多个应用。一个应用可以运用到多个项目中去。

我们再来其他人对这个见解:

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

Django 鼓励我们把自己编写的代码组织到应用(Application)里,并且最好是一个应用只提供一种功能。例如我们要开发的 Django 博客,相关的代码都放在 blog 这个应用里。其实应用也没什么复杂的,不过是把功能相关的代码组织到一个文件夹里,这个文件夹就成了一个应用(姑且可以这样理解)。

我们可以在 Django 工程目录下手动地建立一个文件夹,为它取个名字,并且告诉 Django 说这是一个应用。但是我们不必做这些无聊的工作,Django 已经为我们提供了自动创建应用的命令。

通过这些解释,是不是对这些有了大致的了解,不理解也没关系,我们首先要学会怎么去用,然后再去理解为什么这样用。

创建一个APP,我们还是要借助manage.py,首先我们要进入项目的根目录(manage.py同级目录),然后执行:

python manage.py startapp questions

执行完命令之后,会看到在根目录下多了一个文件夹,包含如下内容:

questions/
    __init__.py
    admin.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

二、创建模型(models)

既然这个APP的功能是手机问题,那么我们该如何将收集的信息存储起来,通常来说这个地方就是数据库,上一篇文章我们已经将数据库设置为mysql,但是要存储这些信息,肯定需要数据表,这些在之前的默认应用中肯定是不存在的,是不是就意味着我们要自己去创建这些数据表么,上文已经提到Django自带ORM,具体介绍可参照美女姐姐的Python Web开发系列课程之——介绍ORM & 创建Model这篇文章去学习和了解。
Django已经为我们做了很多事情,所以我们不需要自己去创建表,我们可以像书写python类那样,表示一个数据表,之后通过上一篇当中提到的迁移命令,创建数据表。
编辑questions/models.py

from django.db import models
import django
# Create your models here.
class Question(models.Model):
    wx_name = models.CharField(max_length=100, verbose_name='姓名')
    detail = models.TextField(verbose_name='问题描述')
    #time = models.DateTimeField(verbose_name='提交时间', default=django.utils.timezone.now)
    def __str__(self):
        return self.wx_name
    class Meta:
        verbose_name = "问题"
        verbose_name_plural = verbose_name
class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    answer = models.TextField(verbose_name='答案详情')
    name = models.CharField(max_length=20, verbose_name='姓名')

    def __str__(self):
        return self.name
    class Meta:
        verbose_name = "答案"
        verbose_name_plural = verbose_name

上述模型是一个一对多的关系,因为一个问题的答案肯定不是唯一的,所以这样来设置,具体每个字段的含义和使用方法可参考官方文档和Python Web开发系列课程之——介绍ORM & 创建Model

三、激活APP

从官方文档可知:

上面那段简短的模型代码给了Django很多信息。
有了这些代码,Django就能够自动完成以下两个功能:

为该应用创建数据库表(CREATE TABLE
语句)。

为Questions
对象和Answer
对象创建一个访问数据库的python API。

但是,我们首先得告诉项目:questions
应用已经安装。

原理:

Django 应用是可以“热插拔”的,即可以在多个项目中使用同一个应用,也可以分发这些应用, 因为它们不需要与某个特定的Django安装绑定。

再次编辑lianxi/settings.py
文件,并修改INSTALLED_APPS设置以包含字符串'questions'。
所以它现在是这样的:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'questions',
)

四、迁移数据

上边内容完成之后,我们执行上一篇文章中提到的:

python manage.py makemigrations questions
#通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改记录为迁移文件。
python manage.py migrate questions
#再次运行migrate在你的数据库中创建模型所对应的表:

应用名也可不加(看情况,有时会出问题)

Django学习(三)—APP及models_第2张图片
执行结果

到此,我们完成了APP的创建以及models的书写,越来越接近我们的目标了,继续努力!!!
发两张简单的效果图,马上你也可以写出来了(css学的渣,界面比较low)

五、效果

问题收集APP

Django学习(三)—APP及models_第3张图片
问题收集APP

问卷调查APP,参照雪莉老师的问卷调查(使用其样式模版)

Django学习(三)—APP及models_第4张图片
问卷调查APP

敬请期待后续记录

  • 下节预告:views and urls

你可能感兴趣的:(Django学习(三)—APP及models)