在第一部分我们完成了安装以及简单的创建工程和应用,今天我们继续学习后面的内容。
一、数据库设置
首先我们打开我们的myfirstsite工程下的setting.py文件。
默认配置使用的是sqlite数据库,如果我们刚接触数据库或者只是对python感兴趣,默认配置是最简单的选择。python自带了sqlite,因此我们不需要额外安装。如果我们需要使用别的数据库例如mysql、oracle、postgresql等我们则需要得先安装好数据库(安装过程这里不赘述,本文使用mysql),然后修改setting.py配置文件
我们将这里的ENGINE(类似java中mysql驱动),NAME(数据库名) 配置项全部改为我需要的mysql配置,另外需要配置数据库用户名和密码,以及host地址端口号
当然还有其他配置项,具体参考https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-DATABASES
执行
python manage.py migrate
执行结束后我们 show tables 发现我们的库里多了好多张表:
什么鬼?怎么这么多表?通过官方文档我了解到其实完全可以不要这些表,其实很简单,只要我们在执行python manage.py migrate 之前将myfirstsite/settings.py 文件中的INSTALLED_APPS配置项把我们不想要的删掉即可。migrate 只会跑我们在INSTALLED_APPS中配置的app。
二、创建模型
我们现在可以定义我们自己的模型了,我们就在我们先前创建的polls应用里定义两个吧,
Question(问题) 和 Choice(选项),Question 中我们可以顶问题描述和发布日期,而Choice中我们可以定义选项描述和投票记录。每一个Choice与一个Question关联。
我们创建的Question和Choice类均继承models模块的Model类,类中我们定义的属性后续的代码中会使用,而且会被Django当作数据表的列名使用 比如 question_text 或者pub_date ,同时我们通过models模块给这些属性定义了类型,比如question_text = models.CharField(max_length=200) 我们告诉Django question_text 是一个字符串类型并且最大长度是200(后续学习中我们会发现不仅在数据库有用,后面的validation校验也会很方便使用),pub_date=models.DateTimeField 告诉Django ,pub_date 是日期类型。发现,我们还使用了ForeignKey 声明了Choice 和question的关联关系。
models中有许多属性类是比传参数的比如models.CharField 就必须设置max_length,当然也是可以有一些可选参数的,例如choice_vote = models.IntegerField 我们设置的default值为0.
了解了这些models的属性类,我们准备开始激活我们新加的两个model。激活之前我们必须得安装我们的app,怎么安装来着?对了,在myfirstsite/settings.py 文件中的INSTALLED_APPS配置中添加我们的应用就好了。
打开polls/app.py文件,我们发现早已经有了一个PollsConfig类,那就简单了:
我们只需要把这个PollsConfig类添加进去就可以了。
配置好了之后我们执行另外一条命令:
python manage.py makemigrations polls
这条命令其实就是告诉Django我们嗯polls的模型发生了改变,我们这里是新建了两个模型。
命令执行成功。同时我们发现polls/migration目录下多了一个0001_initial.py文件
我们准备执行这个文件,创建数据表结构,执行命令:
python mange.py sqlmigrate polls 0001
执行结束后我们发现打印出:
创建表的sql,然而我们发现数据库里并没有实际的创建表,这时候我们可以通过
python manage.py check 命令去检查 建表语句有没有错误什么的
检查好之后我们准备真正的开始建表了:
python manage.py migrate
执行OK ,我们发现数据库中多了两张表(polls_quesion和polls_choice):
在我们开发的过程中难免会出现要修改表结构或者新加或者删除我们不想要的表,那么migration对于我们来说非常重要。其实简单总结一下就三步:
1)修改模型class代码(或新增模型,或删除模型)
2)执行 python manage.py makgemigration 命令告诉Django 模型发生改变了
3)执行 python manage.py migration 命令让Django真正的执行我们所做的改变动作
三、调用API
执行
python manage.py shell
进入命令行
开始编写代码
先导入我们建好的model代码,
查询数据库中的数据结果为空,new一个Question对象并保存:
发现我们的polls_question表中有了一条记录:
修改q对象的question_text的值 并保存,然后我们再new 一个Question对象保存:
从图中我们看到 第二次更改question_text 后再保存的时候 我们的库中的值做了update操作
new出来的第二个对象插入是新插入表中了。
网友评论