设置数据库,创建您的第一个模型,得到一个简单介绍 Django的自动生成管理网站。
数据库设置
现在,打开 mysite / settings.py
。 这是一个普通的Python模块 模块级变量代表Django设置。
默认情况下,配置使用SQLite。 如果你是新数据库,或 你只是在Django感兴趣,这是最简单的选择。 SQLite是 包括在Python中,所以你不需要安装其他的支持你 数据库。 在开始你的第一个真实的项目,然而,你可能想要使用一个 更健壮的数据库如PostgreSQL,避免database-switching头痛 埋下了伏笔。
如果你想使用另一个数据库,安装适当的 数据库 绑定 和改变下面的钥匙 数据库
“默认”
项目以匹配您的数据库连接 设置:
引擎
——要么“django.db.backends.sqlite3”
,“django.db.backends.postgresql”
,“django.db.backends.mysql”
,或“django.db.backends.oracle”
。 其他后端 也可用 。的名字
——您的数据库的名称。 如果你使用SQLite 数据库将是一个文件在你的电脑上,在这种情况下,的名字
应该是完整的绝对路径,包括文件名、文件。 的 默认值,os.path.join(BASE_DIR “db.sqlite3”)
,将存储文件 在你的项目目录中。
如果你不使用SQLite数据库,如额外的设置 用户
, 密码
, 主机
必须补充道。 更多细节,请参见参考文档 数据库
。
除了SQLite数据库
如果您正在使用一个数据库除了SQLite,确保您已经创建了一个 数据库的这一点。 这样做与“ 创建 数据库 database_name;
” 在你的数据库的交互式提示符。
确保提供的数据库用户 mysite / settings.py
“创建数据库”的特权。 这允许自动创建 测试数据库 这将需要在后面的 教程。
如果你使用SQLite,您不需要创建任何事先的 数据库文件时将自动创建。
当你编辑 mysite / settings.py
,设置 TIME_ZONE
来 你的时区。
另外,请注意 INSTALLED_APPS
设置文件的顶部。 那 拥有所有Django的名字在这个Django应用程序被激活 实例。 应用程序可用于多个项目,你可以包和 分发他们使用的其他项目。
默认情况下, INSTALLED_APPS
包含以下应用程序,所有这一切 有Django:
django.contrib.admin
——管理网站。 你很快就会使用它。django.contrib.auth
——一个身份验证系统。django.contrib.contenttypes
——一个内容类型的框架。django.contrib.sessions
——一个会话框架。django.contrib.messages
——一个消息传递框架。django.contrib.staticfiles
——一个框架来管理 静态文件。
这些应用程序都包含在默认情况下作为一个方便常见的情况。
其中的一些应用程序利用至少一个数据库表,不过, 所以我们需要在数据库中创建表之前,我们可以使用它们。 要做 ,运行以下命令:
$ python manage.py migrate
的 迁移
命令查看 INSTALLED_APPS
设置 根据数据库并创建任何必要的数据库表的设置 在你的 mysite / settings.py
文件和数据库迁移 与应用程序(稍后我们将讨论这些)。 您将看到一条消息 迁移应用。 如果你有兴趣,你运行命令行客户端 数据库和类型 dt
(PostgreSQL), 显示 表;
(MySQL), . schema
(SQLite),或 选择 TABLE_NAME 从 USER_TABLES;
(Oracle)来显示 Django创建所需的表。
极简主义者的
像我们上面所说的,默认的应用程序包括为常见 ,但不是每个人都需要他们。 如果你不需要任何或所有的 随意注释掉或删除相应的线(年代) INSTALLED_APPS
在运行之前 迁移
。 的 迁移
命令只会运行迁移的应用程序 INSTALLED_APPS
。
创建模型
现在我们将定义您的模型——从本质上说,您的数据库布局, 额外的元数据。
哲学
单一模型,最终的真相你的数据来源。 它包含 的基本字段和行为你存储的数据。 Django是 的 干燥的原理 。 我们的目标是在一个定义数据模型 并自动获得的东西。
这包括在Ruby On Rails迁移——不像,例如,迁移 完全是源自您的模型文件,基本上只是一个吗 历史Django可以通过更新您的数据库模式 你当前的模型相匹配。
在我们的简单调查应用程序,我们将创建两个模型: 问题
和 选择
。 一个 问题
有一个问题和出版日期。 一个 选择
有两个 字段:选择的文本和点票结果。 每一个 选择
相关联 与一个 问题
。
这些概念是由简单的Python类。 编辑 民意调查/ models.py
文件,以便它看起来像这样:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
代码很简单。 每一个模型是由一个类表示 子类 django.db.models.Model
。 每个模型有很多类 变量,每一个都代表一个数据库字段在模型中。
每个字段由一个实例 场
类,例如, CharField
对字符字段和 DateTimeField
日期时间。 这告诉Django什么 每个字段的数据类型。
每一个的名字 场
(如实例。 question_text
或 pub_date
在machine-friendly)字段的名称, 格式。 您将使用这个值在Python代码中,和你的数据库将使用 这是列名。
您可以使用一个可选的第一个位置参数 场
指定一个人类可读的名字。 使用的 Django内省的地区,它兼具文档。 如果这个字段不是提供,Django将使用机器可读名称。 在这个 例子中,我们只定义了一个可读名称 Question.pub_date
。 在这个模型中,所有其他字段字段的机器可读名称 满足人类可读名称。
一些 场
类需要参数。 CharField
例如,要求你给它一个 max_length
。 不仅在使用 数据库模式,但在验证,我们很快就会看到。
一个 场
也可以有各种可选参数;在吗 这种情况下,我们设置 默认的
的价值 票
为0。
最后,注意定义的关系,使用 ForeignKey
。 Django告诉每个 选择
是 与一个单一的 问题
。 Django支持所有常见的数据库 关系:多对一,多对多,一对一。
激活模型
小的模型代码给Django很多信息。 ,Django 能:
- 创建一个数据库模式(
创建 表
这个程序的语句)。 - 创建一个Python数据库访问API来访问
问题
和选择
对象。
但首先我们需要告诉我们的项目 民意调查
应用程序安装。
哲学
Django应用程序的“可插入”:你可以使用一个应用程序在多个项目, 您可以分发应用程序,因为他们没有与一个给定的 Django安装。
编辑 mysite / settings.py
文件,和改变 INSTALLED_APPS
设置包括字符串 “polls.apps.PollsConfig”
。 它会看起来像这样:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
包括现在Django知道 民意调查
应用。让我们运行一个命令:
$ python manage.py makemigrations polls
您应该看到类似于下面的:
Migrations for 'polls':
0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
通过运行 makemigrations
,你告诉Django 一些更改您的模型(在这种情况下,你已经取得了新的) 你想更改存储为一个 迁移 。
迁移是Django保存模型(因此你的变化 数据库模式)——他们只是文件在磁盘上。 你可以阅读迁移 如果你喜欢你的新模型,它的文件 民意调查/迁移/ 0001 _initial.py
。 别担心,你不会阅读 他们每次Django使人,但它们设计成人类可读 如果你想手动调整Django如何改变的事情。
有一个命令将运行和管理你的数据库的迁移 ——这叫做自动模式 迁移
,我们会来的 的时刻,但首先,让我们看看SQL,迁移将运行。 的sqlmigrate
命令以迁移名称并返回SQL:
$ python manage.py sqlmigrate polls 0001
您应该看到类似于下面的(我们重新格式化它 可读性):
BEGIN;
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"choice_text" varchar(200) NOT NULL,
"votes" integer NOT NULL
);
--
-- Create model Question
--
CREATE TABLE "polls_question" (
"id" serial NOT NULL PRIMARY KEY,
"question_text" varchar(200) NOT NULL