Django 编写您的第一个Django应用 二
数据库设置
现在,打开mysite/settings.py。这是一个普通的Python模块,具有表示Django设置的模块级变量。
默认情况下,配置使用SQLite。如果您不熟悉数据库,或者只是对尝试使用Django感兴趣,这是最简单的选择。SQLite包含在Python中,因此您不需要安装其他任何东西即可支持数据库。但是,在开始第一个实际项目时,您可能希望使用可扩展性更高的数据库(例如PostgreSQL),以避免数据库切换麻烦。
如果要使用另一个数据库,请安装适当的数据库绑定并在项目中更改以下键 以匹配您的数据库连接设置:DATABASES 'default'
ENGINE-要么'django.db.backends.sqlite3','django.db.backends.postgresql','django.db.backends.mysql',或'django.db.backends.oracle'。也可以使用其他后端。NAME–数据库的名称。如果您使用的是SQLite,则数据库将是您计算机上的文件;在这种情况下,NAME应为该文件的完整绝对路径,包括文件名。默认值会将文件存储在您的项目目录中。os.path.join(BASE_DIR, 'db.sqlite3')
如果你不使用SQLite作为数据库,如其他设置 USER,PASSWORD以及HOST必须增加。
在编辑时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–用于管理静态文件的框架。
默认情况下,这些应用程序是为方便起见而包含的。
创建模型
现在,我们将定义您的模型-本质上是您的数据库布局以及其他元数据。
在我们的民意调查应用中,我们将创建两个模型:Question和Choice。
一个 Question有一个问题和出版日期。A Choice有两个字段:选择的文本和一个投票计数。每个Choice都与关联Question。
这些概念由Python类表示。编辑 polls/models.py文件,使其如下所示:

注意使用定义了一个关系 ForeignKey。这告诉Django每个Choice都与一个相关Question。Django支持所有常见的数据库关系:多对一,多对多和一对一。
激活模型
少量的模型代码为Django提供了很多信息。有了它,Django能够:
- 为此应用程序创建数据库架构(语句)。
CREATE TABLE - 创建用于访问
Question和Choice对象的Python数据库访问API 。
但是首先我们需要告诉我们的项目该polls应用程序已安装。
要将应用程序包含在我们的项目中,我们需要在设置中添加对其配置类的引用INSTALLED_APPS。
该 PollsConfig班是在polls/apps.py文件中,所以它的虚线路径'polls.apps.PollsConfig'。
编辑mysite/settings.py文件,并将该虚线路径添加到INSTALLED_APPS设置中。它看起来像这样:

现在Django知道会包含该polls应用程序。让我们运行另一个命令:
python manage.py makemigrations polls
执行的时候应该会报错,只需要安装 “pip install mysqlclient” 即可解决,如果已经安装可以uninstall之后,在install
您应该看到类似于以下内容:

然后取数据库查看对应的表polls_choice 和 polls_question。

迁移是Django存储对模型(以及数据库模式)所做更改的方式-它们是磁盘上的文件。如果愿意,您可以阅读新模型的迁移;这是文件polls/migrations/0001_initial.py。不用担心,您不会期望每次Django都读入它们,但是如果您想手动调整Django的更改方式,则可以对它们进行人工编辑。
有一个命令将为您运行迁移并自动管理您的数据库模式-称为migrate,稍后我们将介绍它-但首先让我们看看将运行哪种SQL。该 sqlmigrate命令采用迁移名称并返回其SQL:
$ python manage.py sqlmigrate polls 0001
您应该看到类似以下内容的内容(为了便于阅读,我们对其进行了重新格式化):

请注意以下几点:
- 确切的输出将根据所使用的数据库而有所不同。
- 表格名称是通过将应用程序的名称(
polls)与模型的小写名称–question和组合而成的choice。(您可以覆盖此行为。) - 自动添加主键(ID)。(您也可以覆盖它。)
- 按照约定,Django将附加
"_id"到外键字段名称。(是的,您也可以覆盖它。) - 通过 约束使外键关系明确。不用担心零件;它告诉PostgreSQL在事务结束之前不要执行外键。
FOREIGN KEYDEFERRABLE - 它是针对您正在使用的数据库量身定制的,因此将自动为您处理特定于数据库的字段类型,例如
auto_increment(MySQL),serial(PostgreSQL)或(SQLite)。字段名称的引用也是如此–例如,使用双引号或单引号。integer primary key autoincrement - 该
sqlmigrate命令实际上并未在数据库上运行迁移-而是将其打印到屏幕上,以便您可以查看Django认为需要的SQL。这对于检查Django将要执行的操作或是否有需要SQL脚本进行更改的数据库管理员很有用。
如果您有兴趣,也可以运行 ;这样可以检查项目中是否存在任何问题,而无需进行迁移或接触数据库。
现在,migrate再次运行以在数据库中创建那些模型表:
python manage.py migrate

该migrate命令获取所有尚未应用的迁移(Django使用名为的特殊表在数据库中跟踪应用了哪些迁移django_migrations),并针对您的数据库运行它们-本质上,将您对模型所做的更改与数据库。
迁移功能非常强大,可以在开发项目时随时间更改模型,而无需删除数据库或表并创建新的模型-它专门用于实时升级数据库而不会丢失数据。我们将在本教程的后面部分中更深入地介绍它们,但是现在,请记住进行模型更改的三步指南:
- 更改模型(在中
models.py)。 - 运行为这些更改创建迁移
python manage.py makemigrations - 运行以将那些更改应用到数据库。
python manage.py migrate
之所以使用单独的命令来进行和应用迁移,是因为您会将迁移提交到版本控制系统,并随应用程序一起交付;它们不仅使您的开发更加容易,而且还可以被其他开发人员和生产环境使用。
Playing with the API
现在,让我们跳入交互式Python外壳并尝试使用Django提供的免费API。要调用Python Shell,请使用以下命令:
$ python manage.py shell
我们使用它而不是简单地输入“ python”,因为它manage.py 设置了DJANGO_SETTINGS_MODULE环境变量,该变量为Django提供了到mysite/settings.py文件的Python导入路径。
进入Shell后,探索数据库API:


向模型中添加方法

保存这些更改,然后再次运行以启动新的Python交互式shell :python manage.py shell



浙公网安备 33010602011771号