Django 中的 ContentTypes 框架实现指南

Django 的 content types 框架使我们能够通过通用外键在模型之间建立灵活的关系,从而提高数据库的可扩展性。在这篇文章中,我们将向大家展示如何在 Django 中实现 content types 框架。

什么是 Django 中的 ContentTypes 框架?

Django 中的 ContentTypes 框架为我们提供了一种动态创建模型之间关系的方法。通常情况下,当我们在模型中定义 INLINECODEa88d9bec 或 INLINECODEb71e6114 时,我们需要直接指定目标模型。然而,利用 ContentTypes 框架,我们可以在不显式引用目标模型的情况下创建关系。相反,这种关系是通过 content type IDs 和 object IDs 来建立的。

> Content Types 对 Django 中的实体进行分类:带有标记项、书籍和作者的“Home”;包含会话数据的“Sessions”;用于类型管理的“Content Types”;用于用户、组和权限的“Authentication and Authorization”;以及用于日志条目的“Administration”,从而简化项目的组织和管理。

Home | tagged item
    Home | book
    Home | author
    Sessions | session
    Content Types | content type
    Authentication and Authorization | user
    Authentication and Authorization | group
    Authentication and Authorization | permission
    Administration | log entry

下面是我们在 Python 语言的 Django 中实现 Content types 框架的步骤:

启动项目文件夹

让我们使用以下命令来启动项目:

django-admin startproject core
cd core

接着,使用以下命令启动应用:

python manage.py startapp home

现在,我们需要将这个应用添加到 ****‘settings.py’**** 文件中:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "home",
]

文件结构

!file-sturcutr文件结构

设置必要的文件

models.py : 这段 Django 代码展示了 content types 框架的用法,它实现了模型之间的动态关系。INLINECODEbf67c2e8INLINECODE6294d9f0 类允许在不同的模型实例之间建立灵活的关联。当一个模型需要关联多个其他模型而又不希望硬编码关系时,这种方法非常有用。

Python3


CODEBLOCK_292f8262

views.py : 这个 Django 视图函数从数据库中检索所有的作者、书籍和标记项,并将它们传递给 index.html 模板进行渲染。

Python3


CODEBLOCK_2ff6f0b0

创建图形用户界面 (GUI)

index.html : 这个 HTML 模板显示了从 Django 视图中检索到的作者、书籍和标记项列表。它会遍历每个对象并展示相关信息,例如作者姓名、书籍标题以及标记项的详细信息(如 content type 和 object ID)。

HTML


Django ContentTypes Example

body {

font-family: Arial, sans-serif;

margin: 0;

padding: 0;

background-color: #f4f4f4;

}

h1 {

color: #333;

text-align: center;

margin-top: 20px;

}

ul {

list-style-type: none;

padding: 0;

}

li {

background-color: #fff;

padding: 10px;

margin-bottom: 5px;

border-radius: 5px;

box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);

}

Authors

    {% for author in authors %}

    • {{ author.name }}

    {% endfor %}

B

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/48923.html
点赞
0.00 平均评分 (0% 分数) - 0