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 的使用熟练程度。
您还了解了在管理界面中注册模型的重要性,以便在开发过程中轻松管理。