在上一篇文章当中,我们介绍了怎样更换默认的数据库,以及迁移数据,在本文当中,我们去创建我们自己的APP(应用)以及书写models。
本文以一个简单的问题收集demo为例介绍App,以及创建models
一、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在你的数据库中创建模型所对应的表:
应用名也可不加(看情况,有时会出问题)
到此,我们完成了APP的创建以及models的书写,越来越接近我们的目标了,继续努力!!!
发两张简单的效果图,马上你也可以写出来了(css学的渣,界面比较low)
五、效果
问题收集APP
问卷调查APP,参照雪莉老师的问卷调查(使用其样式模版)
敬请期待后续记录
- 下节预告:views and urls