当前位置: 技术文章>> 如何使用 Django 模型执行 CRUD 操作

文章标题:如何使用 Django 模型执行 CRUD 操作
  • 文章分类: 后端
  • 26084 阅读

Django 是一个超级有用的工具,用于使用 Python 构建 Web 应用程序。它遵循模型-视图-模板 (MVT) 体系结构,这是一种用于构建 Web 应用的流行设计模式。

在 MVT 架构中,模型是指存储信息的内部表示,视图负责处理用户请求并返回适当的响应,模板负责呈现从视图接收的数据。

本指南重点介绍体系结构的“模型”部分,该部分是应用程序的核心组件,也是设计应用程序时通常从该部分开始的地方。该模型负责数据的内部表示,并提供直接与数据库交互的接口。

在本教程中,您将学习如何使用 Django 的交互式 shell 来创建、读取、更新和删除对象。您还将学习如何在管理界面中注册模型,这对于为您的 Django 项目设计组织良好的数据库非常有用。

这些技能将使您能够更有效地管理您的项目并确保它们顺利运行。

先决条件

为了充分利用本教程,你需要对 Python 和 Django 有基本的了解。

如何设置项目

为了帮助您理解本教程中的概念,您将开发一个简单的“待办事项”应用。

首先,创建一个新目录,您将在其中托管项目,然后将目录更改为该目录。

进入文件夹后,安装 ,一个用于建立隔离 Python 环境的工具。virtualenv

pip install virtualenv

virtualenv venvsource venv/bin/activate

pip install virtualenv安装必要的工具。 创建一个名为 venv 的虚拟环境。最后,激活虚拟环境,允许在指定环境中进行隔离的 Python 开发。virtualenv venvsource venv/bin/activate

随意将“venv”替换为您在创建虚拟环境时选择的名称。

确保已安装 Django。如果没有,请通过命令行安装它,如下所示:

pip install django

使用以下命令启动项目:

django-admin startproject todoproject

切换到项目目录,然后创建一个新应用。todoproject

cd todoproject

python manage.py startapp todoapp

接下来,将应用的名称包含在 的列表中。在代码编辑器中,导航到文件。INSTALLED_APPSsettings.pysettings.py

 INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'todoapp' # new app]

Django 模型

模型就像 Django 中所有数据的首选专家。这就像一个详细的计划,说明您要存储哪些信息、如何存储以及如何检索这些信息。

待办事项应用程序将存储任务。通过仅存储要完成的任务的标题及其完成状态(即任务是否已完成),您将保持简单。在文本编辑器中打开该文件并添加以下代码:models.py

from django.db import modelsclass Task(models.Model):

    title = models.CharField(max_length=100)

    completed = models.BooleanField(default=False)

在这个超级简单的模型中:

Task是模型的名称。

title是最大长度为 100 个字符的类型字段。此字段适用于存储短文本。CharField

completed是默认值为 的类型字段。此字段是一个布尔值 (True/False)。默认值设置为 ,假设任务在默认情况下以未完成状态开始。BooleanFieldFalseFalse

模型的主要部分是它存储的事物列表(称为字段)。 和 是字段,属于 和 字段类型。titlecompletedBooleanFieldCharField

您可以使用的其他字段类型示例包括:

AutoField:自动递增。IntegerField

BooleanField:表示 true/false 值。

CharField:存储基于文本的值。

DateField:表示使用实例的日期。datetime.date

DateTimeField:表示使用实例的日期和时间。datetime.datetime

DecimalField:表示使用实例的固定精度十进制数。Decimal

EmailField:验证值是否为有效的电子邮件地址。CharField

ImageField:继承自 ,确保上传的对象是有效的图像。FileField

IntegerField:将整数值存储在安全范围内。

SlugField:表示某物的短标签,通常用于 URL。

TextField:一个大的文本字段。

TimeField:表示使用实例的时间。datetime.time

URLField:a 表示 URL。CharField

其他字段类型解释了表之间的关系:

ForeignKey:表示多对一关系。

ManyToManyField:表示多对多关系。

OneToOneField:表示一对一的关系。从本质上讲,它类似于 with ,但关系的“反向”侧直接产生单个对象。ForeignKeyunique=True

若要将数据库与 Django 模型中的最新更改同步,必须运行迁移。请确保您与文件位于同一目录中,然后运行以下命令:manage.py

python manage.py makemigrations

python manage.py migrate

截图-2024-01-12-14-48-39进行迁移

在文件中注册模型。这使管理员能够通过 Django 管理界面查看、添加、编辑和删除模型的实例。这是在开发和测试期间与数据交互的便捷方式。admin.pyTask

#admin.pyfrom django.contrib import adminfrom .models import Task# Register your models here.admin.site.register(Task)

你需要创建一个才能访问 Django 管理界面。在终端中,运行以下命令:superuser

python manage.py createsuperuser

截图-2024-01-12-14-52-19创建超级用户

按照提示操作,您应该有一个超级用户帐户来访问管理界面。

The Django Shell

你通常会在视图中编写逻辑,但由于我们想做更多的实验,你将使用 Django shell。它是一个功能强大且用途广泛的工具,可增强 Django 项目的开发和测试体验。shell 还提供了一个动态的交互式环境,用于处理代码、数据和模型。

若要访问 shell,请从项目目录运行以下命令:

python manage.py shell

首先导入任务模型。

截图-来自-2024-01-12-15-15-57将模型导入 Django shell

对模型执行的基本操作通常是创建、读取、更新和删除,因此得名 CRUD 应用程序。您将在此处学习如何执行所有四个操作。

创造

若要创建新任务,请在 shell 中键入以下命令:

>>> new_task = Task(title='Complete Assignment', completed=False)>>> new_task.save()

或者,您可以使用该函数,如下所示:create

Task.objects.create(title='Another Task', completed=False)

要检查所有任务,请输入以下内容:

Task.objects.all()

你应该得到类似于你在下图中看到的东西。请注意,查询集与刚刚创建的任务一起返回:

截图-2024-01-15-12-32-55在 Django shell 中创建对象

创建对象后,您应该能够读取它们。为此,Django 提供了 和 方法。get()filter()

该方法根据指定的条件从数据库中检索单个对象。如果未找到任何对象或多个对象,则会引发异常,使其适用于唯一查询。get()

该方法检索与指定条件匹配的数据库对象的查询集。如果找到多个对象或未找到对象,它不会引发异常,因此非常适合具有多个可能结果的查询。filter()

您可以使用该方法检索具有特定标题的任务。get()

specific_task = Task.objects.get(title='Complete Assignment')print(f'Title: {specific_task.title}, Completed: {specific_task.completed}')

上述代码的输出如下:

截图-from-2024-01-15-13-59-07在 Django shell 中检索特定对象

如果任务满足特定条件,您还可以检索该任务。这就是过滤方法的亮点。

假设您想要获取未完成的任务,即字段设置为 的任务。您可以添加以下代码:completedFalse

incomplete_tasks = Task.objects.filter(completed=False)for task in incomplete_tasks:

    print(f'Title: {task.title}, Completed: {task.completed}')

这将返回所有尚未完成的任务。

截图-2024-01-15-14-02-44-1在 Django shell 中检索满足特定条件的对象

此方法非常适合根据特定条件检索多个对象。

更新

如果要进行更改,则可以使用该方法进行更改。假设您已完成所有任务,现在想要将其标记为已完成。代码如下:update()

incomplete_tasks = Task.objects.filter(completed=False)incomplete_tasks.update(completed=True)all_tasks = Task.objects.all()for task in all_tasks:

    print(f'Title: {task.title}, Completed: {task.completed}')

以上代码的输出为:

截图-2024-01-15-14-37-07-1在 Django shell 中更新对象

这首先将任务的状态更新为 ,然后打印已完成的任务。completed

删除

完成所有操作后,您可能希望删除所有任务或特定任务。您可以使用方法执行此操作,如下所示:delete()

task_to_delete = Task.objects.get(title='Another Task') task_to_delete.delete() all_tasks_after_deletion = Task.objects.all() for task in all_tasks_after_deletion:

    print(f'Title: {task.title}, Completed: {task.completed}')

上面的代码使用该方法获取标题为“另一个任务”的任务,然后使用该方法将其删除。最后,它会打印所有剩余任务的详细信息,以验证删除是否成功。getdelete

输出为:

截图-2024-01-15-14-53-40删除 Django shell 中的对象

或者,您可以像这样简化上面的代码:

task_to_delete = Task.objects.get(title='Another Task').delete() all_tasks_after_deletion = Task.objects.all() for task in all_tasks_after_deletion:

    print(f'Title: {task.title}, Completed: {task.completed}')

你可以访问你在 Django 管理面板中创建的所有任务。在终端中启动服务器,如下所示:

python manage.py runserver

然后在浏览器上访问站点 http://127.0.0.1:8000/admin/ 并输入您之前创建的超级用户凭据。在那里,您可以访问您创建的所有任务。

截图-2024-01-15-14-59-40Django 管理界面

我们删除了另一个任务,因此剩余的任务是“完成分配”任务,如上所示。

结论

在本教程中,你探索了创建、读取、更新和删除对象的实际示例,提高了你对 Django 交互式 shell 的使用熟练程度。

您还了解了在管理界面中注册模型的重要性,以便在开发过程中轻松管理。


推荐文章