编写你的第一个Django应用程序 二

第2部分

数据库设置

现在,打开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’)

在编辑时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 - 用于管理静态文件的框架。

默认情况下包含这些应用程序,以方便常见情况。

其中一些应用程序至少使用了一个数据库表,因此我们需要在使用它们之前在数据库中创建表。为此,请运行以下命令:
在这里插入图片描述
该migrate命令查看INSTALLED_APPS设置并根据mysite/settings.py文件中的数据库设置和应用程序附带的数据库迁移创建任何必要的数据库表(稍后我们将介绍这些表)。您将看到适用于每次迁移的消息。如果您有兴趣,请运行数据库的命令行客户端并键入\dt(PostgreSQL),(MySQL), (SQLite)或(Oracle)以显示Django创建的表。SHOW TABLES;.schemaSELECT TABLE_NAME FROM USER_TABLES;

创建模型

现在我们将定义您的模型 - 本质上是您的数据库布局,以及其他元数据。
在我们简单的民意调查应用程序中,我们将创建两个模型:Question和Choice。A Question有问题和出版日期。A Choice有两个字段:选择的文本和投票记录。每个Choice都与一个Question。

这些概念由简单的Python类表示。编辑 polls/models.py文件,使其如下所示:
在这里插入图片描述
代码很简单。每个模型由一个子类表示django.db.models.Model。每个模型都有许多类变量,每个变量代表模型中的数据库字段。

每个字段由Field 类的实例表示- 例如,CharField用于字符字段和 DateTimeField日期时间。这告诉Django每个字段包含哪种类型的数据。

每个Field实例的名称(例如 question_text或pub_date)是字段名称,采用机器友好格式。您将在Python代码中使用此值,并且您的数据库将使用它作为列名。

您可以使用可选的第一个位置参数 Field来指定一个人类可读的名称。这在Django的几个内省部分中使用,并且它兼作文档。如果未提供此字段,Django将使用机器可读的名称。在这个例子中,我们只定义了一个人类可读的名称Question.pub_date。对于此模型中的所有其他字段,字段的机器可读名称就足以作为其可读的名称。

有些Field类需要参数。 CharField例如,要求你给它一个 max_length。这不仅在数据库模式中使用,而且在验证中使用,我们很快就会看到。

A Field也可以有各种可选参数; 在这种情况下,我们将default值 设置votes为0。

最后,请注意使用的定义关系 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应用程序。让我们运行另一个命令:
在这里插入图片描述
您应该看到类似于以下内容的内容:
在这里插入图片描述
通过运行makemigrations,您告诉Django您已对模型进行了一些更改(在这种情况下,您已经创建了新模型),并且您希望将更改存储为迁移。

迁移是Django如何存储对模型(以及数据库模式)的更改 - 它们只是磁盘上的文件。如果您愿意,可以阅读新模型的迁移; 这是文件 polls/migrations/0001_initial.py。不要担心,每次Django制作时都不会读它们,但是如果你想手动调整Django如何改变它们,它们的设计是人为可编辑的。

有一个命令可以为您运行迁移并自动管理您的数据库模式 - 这是被调用的migrate,我们马上就会看到它 - 但首先,让我们看看迁移将运行的SQL。该 sqlmigrate命令获取迁移名称并返回其SQL:
在这里插入图片描述
您应该看到类似于以下内容的东西(为了便于阅读,我们重新格式化了它):
在这里插入图片描述
请注意以下事项:

  • 确切的输出将根据您使用的数据库而有所不同。上面的示例是为PostgreSQL生成的。
  • 表名是通过组合应用程序的名称(自动生成polls)和模型的小写名字- question和 choice。(您可以覆盖此行为。)
  • 主键(ID)会自动添加。(你也可以覆盖它。)
  • 按照惯例,Django附加"_id"到外键字段名称。(是的,你也可以覆盖它。)
  • 外键关系通过 约束显式化。不要担心零件; 这只是告诉PostgreSQL在事务结束前不强制执行外键。FOREIGN KEYDEFERRABLE
  • 它是根据您正在使用的数据库量身定制的,因此可以自动为您处理特定于数据库的字段类型,如auto_increment(MySQL),serial(PostgreSQL)或(SQLite)。引用字段名称也是如此 - 例如,使用双引号或单引号。integer primary key autoincrement
  • 该sqlmigrate命令实际上并不在您的数据库上运行迁移 - 它只是将其打印到屏幕上,以便您可以看到SQL Django认为需要什么。它对于检查Django将要执行的操作或者是否有需要SQL脚本进行更改的数据库管理员非常有用。

如果你有兴趣,你也可以跑 ; 这将检查项目中的任何问题,而无需进行迁移或触摸数据库。python manage.py check

现在,migrate再次运行以在数据库中创建这些模型表:
在这里插入图片描述
该migrate命令将执行所有尚未应用的迁移(Django跟踪使用数据库中的特殊表来应用哪些迁移django_migrations)并针对您的数据库运行它们 - 实际上,您将对模型所做的更改与模型中的模式同步数据库。

迁移功能非常强大,您可以在开发项目时随时更改模型,而无需删除数据库或表并创建新数据库 - 它专门用于实时升级数据库,而不会丢失数据。我们将在本教程的后续部分中更深入地介绍它们,但是现在,请记住进行模型更改的三步指南:

  • 更改模型(in models.py)。
  • 运行以创建这些更改的迁移python manage.py makemigrations
  • 运行以将这些更改应用于数据库。python manage.py migrate

之所以有单独的命令来制作和应用迁移是因为您将提交迁移到您的版本控制系统并将其与您的应用程序一起发送; 它们不仅使您的开发更容易,而且还可供其他开发人员和生产中使用。

使用

现在,让我们进入交互式Python shell并使用Django为您提供的免费API。要调用Python shell,请使用以下命令:
在这里插入图片描述
我们使用它而不是简单地输入“python”,因为manage.py 设置了DJANGO_SETTINGS_MODULE环境变量,这为Django提供了mysite/settings.py文件的Python导入路径。

进入shell后,浏览数据库API:
在这里插入图片描述在这里插入图片描述
等一下。不是这个对象的有用表示。让我们来解决这个问题通过编辑模型(在文件),并加入 到两个方法和 :<Question: Question object (1)>Questionpolls/models.py__str__()QuestionChoice
在这里插入图片描述
str()向模型添加方法非常重要,不仅是为了您在处理交互式提示时的方便,还因为在Django自动生成的管理中使用了对象的表示。

请注意,这些是普通的Python方法。让我们添加一个自定义方法,仅用于演示:
在这里插入图片描述
请注意添加和分别引用Python的标准模块和Django的时区相关实用程序。如果您不熟悉Python中的时区处理,可以在时区支持文档中了解更多信息。import datetimefrom django.utils import timezonedatetimedjango.utils.timezone

保存这些更改并通过再次运行启动新的Python交互式shell :python manage.py shell
在这里插入图片描述在这里插入图片描述在这里插入图片描述

介绍Django管理员

创建管理员用户

首先,我们需要创建一个可以登录管理站点的用户。运行以下命令:
在这里插入图片描述
输入所需的用户名,然后按Enter键。
在这里插入图片描述
然后,系统将提示您输入所需的电子邮件地址:
在这里插入图片描述
最后一步是输入密码。系统会要求您输入两次密码,第二次输入密码作为第一次确认。
在这里插入图片描述

启动开发服务器

Django管理站点默认激活。让我们启动开发服务器并进行探索。

如果服务器没有运行,请启动它:
在这里插入图片描述
现在,打开Web浏览器并转到本地域的“/ admin /” - 例如 http://127.0.0.1:8000/admin/。 您应该看到管理员的登录屏幕:
在这里插入图片描述
由于默认情况下打开翻译,因此登录屏幕可能会以您自己的语言显示,具体取决于您的浏览器设置以及Django是否有此语言的翻译。

进入管理站点

现在,尝试使用您在上一步中创建的超级用户帐户登录。你应该看到Django管理员索引页面:
在这里插入图片描述
您应该看到几种类型的可编辑内容:组和用户。它们django.contrib.auth由Django 提供的身份验证框架提供。

在管理员中修改民意调查应用程序

但是我们的投票应用程序在哪里?它不会显示在管理员索引页面上。

只需做一件事:我们需要告诉管理员Question 对象有一个管理界面。为此,请打开该polls/admin.py 文件,然后将其编辑为如下所示:
在这里插入图片描述

探索免费的管理功能

现在我们已经注册了Question,Django知道它应该显示在管理员索引页面上:
在这里插入图片描述
单击“问题”。现在,您将进入“更改列表”页面以查询问题。此页面显示数据库中的所有问题,您可以选择一个更改它。我们之前创建了“什么事?”这个问题:
在这里插入图片描述
点击“怎么了?”问题进行编辑:
在这里插入图片描述
这里要注意的事项:

  • 表单是从Question模型自动生成的。
  • 不同的模型字段类型(DateTimeField, CharField)对应于相应的HTML输入窗口小部件。每种类型的字段都知道如何在Django管理员中显示自己。
  • 每个都DateTimeField获得免费的JavaScript快捷方式。日期获得“今日”快捷方式和日历弹出窗口,时间获得“现在”快捷方式和方便的弹出窗口,列出常用的输入时间。

页面底部为您提供了几个选项:

  • 保存 - 保存更改并返回此类对象的更改列表页面。
  • 保存并继续编辑 - 保存更改并重新加载此对象的管理页面。
  • 保存并添加另一个 - 保存更改并为此类对象加载新的空白表单。
  • 删除 - 显示删除确认页面。
    如果“发布日期”的值与您在教程1中创建问题的时间不匹配,则可能意味着您忘记为该TIME_ZONE设置设置正确的值。更改它,重新加载页面并检查是否显示正确的值。

单击“今天”和“立即”快捷方式更改“发布日期”。然后单击“保存并继续编辑”。然后单击右上角的“历史记录”。您将看到一个页面,其中列出了通过Django管理员对此对象所做的所有更改,以及进行更改的人员的时间戳和用户名:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值