<p>Django 是一个超级有用的工具,用于使用 Python 构建 Web 应用程序。它遵循模型-视图-模板 (MVT) 体系结构,这是一种用于构建 Web 应用的流行设计模式。</p><p>在 MVT 架构中,模型是指存储信息的内部表示,视图负责处理用户请求并返回适当的响应,模板负责呈现从视图接收的数据。</p><p>本指南重点介绍体系结构的“模型”部分,该部分是应用程序的核心组件,也是设计应用程序时通常从该部分开始的地方。该模型负责数据的内部表示,并提供直接与数据库交互的接口。</p><p>在本教程中,您将学习如何使用 Django 的交互式 shell 来创建、读取、更新和删除对象。您还将学习如何在管理界面中注册模型,这对于为您的 Django 项目设计组织良好的数据库非常有用。</p><p>这些技能将使您能够更有效地管理您的项目并确保它们顺利运行。</p><p>先决条件</p><p>为了充分利用本教程,你需要对 Python 和 Django 有基本的了解。</p><p>如何设置项目</p><p>为了帮助您理解本教程中的概念,您将开发一个简单的“待办事项”应用。</p><p>首先,创建一个新目录,您将在其中托管项目,然后将目录更改为该目录。</p><p>进入文件夹后,安装 ,一个用于建立隔离 Python 环境的工具。virtualenv</p><p>pip install virtualenv</p><p>virtualenv venvsource venv/bin/activate</p><p>pip install virtualenv安装必要的工具。 创建一个名为 venv 的虚拟环境。最后,激活虚拟环境,允许在指定环境中进行隔离的 Python 开发。virtualenv venvsource venv/bin/activate</p><p>随意将“venv”替换为您在创建虚拟环境时选择的名称。</p><p>确保已安装 Django。如果没有,请通过命令行安装它,如下所示:</p><p>pip install django</p><p>使用以下命令启动项目:</p><p>django-admin startproject todoproject</p><p>切换到项目目录,然后创建一个新应用。todoproject</p><p>cd todoproject</p><p>python manage.py startapp todoapp</p><p>接下来,将应用的名称包含在 的列表中。在代码编辑器中,导航到文件。INSTALLED_APPSsettings.pysettings.py</p><p> <span style="color: #569cd6;">INSTALLED_APPS</span> = [</p><p> <span style="color: #ce9178;">'django.contrib.admin'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.auth'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.contenttypes'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.sessions'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.messages'</span>,</p><p> <span style="color: #ce9178;">'django.contrib.staticfiles'</span>,</p><p> <span style="color: #ce9178;">'todoapp'</span> <span style="color: #6a9955;"># new app]</span></p><p>Django 模型</p><p>模型就像 Django 中所有数据的首选专家。这就像一个详细的计划,说明您要存储哪些信息、如何存储以及如何检索这些信息。</p><p>待办事项应用程序将存储任务。通过仅存储要完成的任务的标题及其完成状态(即任务是否已完成),您将保持简单。在文本编辑器中打开该文件并添加以下代码:models.py</p><p>from django.db import modelsclass Task(models.Model):</p><p> <span style="color: #569cd6;">title</span> = models.CharField(<span style="color: #569cd6;">max_length</span>=100)</p><p> <span style="color: #569cd6;">completed</span> = models.BooleanField(<span style="color: #569cd6;">default</span>=False)</p><p>在这个超级简单的模型中:</p><p>Task是模型的名称。</p><p>title是最大长度为 100 个字符的类型字段。此字段适用于存储短文本。CharField</p><p>completed是默认值为 的类型字段。此字段是一个布尔值 (True/False)。默认值设置为 ,假设任务在默认情况下以未完成状态开始。BooleanFieldFalseFalse</p><p>模型的主要部分是它存储的事物列表(称为字段)。 和 是字段,属于 和 字段类型。titlecompletedBooleanFieldCharField</p><p>您可以使用的其他字段类型示例包括:</p><p>AutoField:自动递增。IntegerField</p><p>BooleanField:表示 true/false 值。</p><p>CharField:存储基于文本的值。</p><p>DateField:表示使用实例的日期。datetime.date</p><p>DateTimeField:表示使用实例的日期和时间。datetime.datetime</p><p>DecimalField:表示使用实例的固定精度十进制数。Decimal</p><p>EmailField:验证值是否为有效的电子邮件地址。CharField</p><p>ImageField:继承自 ,确保上传的对象是有效的图像。FileField</p><p>IntegerField:将整数值存储在安全范围内。</p><p>SlugField:表示某物的短标签,通常用于 URL。</p><p>TextField:一个大的文本字段。</p><p>TimeField:表示使用实例的时间。datetime.time</p><p>URLField:a 表示 URL。CharField</p><p>其他字段类型解释了表之间的关系:</p><p>ForeignKey:表示多对一关系。</p><p>ManyToManyField:表示多对多关系。</p><p>OneToOneField:表示一对一的关系。从本质上讲,它类似于 with ,但关系的“反向”侧直接产生单个对象。<span style="color: #569cd6;">ForeignKeyunique</span>=True</p><p>若要将数据库与 Django 模型中的最新更改同步,必须运行迁移。请确保您与文件位于同一目录中,然后运行以下命令:manage.py</p><p>python manage.py makemigrations</p><p>python manage.py migrate</p><p>截图-2024-01-12-14-48-39进行迁移</p><p>在文件中注册模型。这使管理员能够通过 Django 管理界面查看、添加、编辑和删除模型的实例。这是在开发和测试期间与数据交互的便捷方式。admin.pyTask</p><p><span style="color: #6a9955;">#admin.pyfrom django.contrib import adminfrom .models import Task# Register your models here.admin.site.register(Task)</span></p><p>你需要创建一个才能访问 Django 管理界面。在终端中,运行以下命令:superuser</p><p>python manage.py createsuperuser</p><p>截图-2024-01-12-14-52-19创建超级用户</p><p>按照提示操作,您应该有一个超级用户帐户来访问管理界面。</p><p>The Django Shell</p><p>你通常会在视图中编写逻辑,但由于我们想做更多的实验,你将使用 Django shell。它是一个功能强大且用途广泛的工具,可增强 Django 项目的开发和测试体验。shell 还提供了一个动态的交互式环境,用于处理代码、数据和模型。</p><p>若要访问 shell,请从项目目录运行以下命令:</p><p>python manage.py shell</p><p>首先导入任务模型。</p><p>截图-来自-2024-01-12-15-15-57将模型导入 Django shell</p><p>对模型执行的基本操作通常是创建、读取、更新和删除,因此得名 CRUD 应用程序。您将在此处学习如何执行所有四个操作。</p><p>创造</p><p>若要创建新任务,请在 shell 中键入以下命令:</p><p>>>> <span style="color: #569cd6;">new_task</span> = Task(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Complete Assignment'</span>, <span style="color: #569cd6;">completed</span>=False)>>> new_task.save()</p><p>或者,您可以使用该函数,如下所示:create</p><p>Task.objects.create(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>, <span style="color: #569cd6;">completed</span>=False)</p><p>要检查所有任务,请输入以下内容:</p><p>Task.objects.all()</p><p>你应该得到类似于你在下图中看到的东西。请注意,查询集与刚刚创建的任务一起返回:</p><p>截图-2024-01-15-12-32-55在 Django shell 中创建对象</p><p>读</p><p>创建对象后,您应该能够读取它们。为此,Django 提供了 和 方法。get()filter()</p><p>该方法根据指定的条件从数据库中检索单个对象。如果未找到任何对象或多个对象,则会引发异常,使其适用于唯一查询。get()</p><p>该方法检索与指定条件匹配的数据库对象的查询集。如果找到多个对象或未找到对象,它不会引发异常,因此非常适合具有多个可能结果的查询。filter()</p><p>您可以使用该方法检索具有特定标题的任务。get()</p><p><span style="color: #569cd6;">specific_task</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Complete Assignment'</span>)print(f<span style="color: #ce9178;">'Title: {specific_task.title}, Completed: {specific_task.completed}'</span>)</p><p>上述代码的输出如下:</p><p>截图-from-2024-01-15-13-59-07在 Django shell 中检索特定对象</p><p>如果任务满足特定条件,您还可以检索该任务。这就是过滤方法的亮点。</p><p>假设您想要获取未完成的任务,即字段设置为 的任务。您可以添加以下代码:completedFalse</p><p><span style="color: #569cd6;">incomplete_tasks</span> = Task.objects.filter(<span style="color: #569cd6;">completed</span>=False)for task in incomplete_tasks:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>这将返回所有尚未完成的任务。</p><p>截图-2024-01-15-14-02-44-1在 Django shell 中检索满足特定条件的对象</p><p>此方法非常适合根据特定条件检索多个对象。</p><p>更新</p><p>如果要进行更改,则可以使用该方法进行更改。假设您已完成所有任务,现在想要将其标记为已完成。代码如下:update()</p><p><span style="color: #569cd6;">incomplete_tasks</span> = Task.objects.filter(<span style="color: #569cd6;">completed</span>=False)incomplete_tasks.update(<span style="color: #569cd6;">completed</span>=True)<span style="color: #569cd6;">all_tasks</span> = Task.objects.all()for task in all_tasks:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>以上代码的输出为:</p><p>截图-2024-01-15-14-37-07-1在 Django shell 中更新对象</p><p>这首先将任务的状态更新为 ,然后打印已完成的任务。completed</p><p>删除</p><p>完成所有操作后,您可能希望删除所有任务或特定任务。您可以使用方法执行此操作,如下所示:delete()</p><p><span style="color: #569cd6;">task_to_delete</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>) task_to_delete.delete() <span style="color: #569cd6;">all_tasks_after_deletion</span> = Task.objects.all() for task in all_tasks_after_deletion:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>上面的代码使用该方法获取标题为“另一个任务”的任务,然后使用该方法将其删除。最后,它会打印所有剩余任务的详细信息,以验证删除是否成功。getdelete</p><p>输出为:</p><p>截图-2024-01-15-14-53-40删除 Django shell 中的对象</p><p>或者,您可以像这样简化上面的代码:</p><p><span style="color: #569cd6;">task_to_delete</span> = Task.objects.get(<span style="color: #569cd6;">title</span>=<span style="color: #ce9178;">'Another Task'</span>).delete() <span style="color: #569cd6;">all_tasks_after_deletion</span> = Task.objects.all() for task in all_tasks_after_deletion:</p><p> print(f<span style="color: #ce9178;">'Title: {task.title}, Completed: {task.completed}'</span>)</p><p>你可以访问你在 Django 管理面板中创建的所有任务。在终端中启动服务器,如下所示:</p><p>python manage.py runserver</p><p>然后在浏览器上访问站点 http://127.0.0.1:8000/admin/ 并输入您之前创建的超级用户凭据。在那里,您可以访问您创建的所有任务。</p><p>截图-2024-01-15-14-59-40Django 管理界面</p><p>我们删除了另一个任务,因此剩余的任务是“完成分配”任务,如上所示。</p><p>结论</p><p>在本教程中,你探索了创建、读取、更新和删除对象的实际示例,提高了你对 Django 交互式 shell 的使用熟练程度。</p><p>您还了解了在管理界面中注册模型的重要性,以便在开发过程中轻松管理。</p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 1.5em; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: 1.5em; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 1.25em; vertical-align: baseline; min-width: 100%; color: rgb(10, 10, 35); text-wrap: wrap; background-color: rgb(255, 255, 255);"><br/></p>