Django系列:Django的项目结构与配置解析

Django系列
Django的项目结构与配置解析

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/132893616


【介绍】:本文讲解Django的项目结构与配置。

上一节:《 Django开发环境配置与第一个Django项目(project) | 下一节:《 Django应用(app)的创建与配置

在这里插入图片描述


1. 概述

本文介绍了Django项目的整体结构,这仅仅是基本的Django项目结构,包括各个文件和目录的作用,以及如何通过Django项目的设置文件(settings.py)指定他们;然后全面介绍了一个初始的Django项目中settings.py文件各个配置项的功能和配置方法。

2. Django的项目结构

Django 项目结构是指一个典型的 Django 项目所包含的目录和文件组织方式,这种结构旨在提供一种清晰、可维护和可扩展的方式来组织项目代码和资源。

2.1 项目根目录(Project Root)

项目的顶层目录,通常是项目的名称。在这个目录下,您会找到项目的配置文件、顶级应用、静态文件、模板等。

  • manage.py:Django 项目管理工具的入口文件,用于执行各种管理命令。
  • myproject/(项目名称):项目的 Python 包,也是项目的主目录。
  • requirements.txt:列出了项目所需的所有 Python 包的列表,通常使用 pip 安装。

例如,以下是在控制台上输出的一个进行过数据库迁移(migrate)的项目的文件目录结构:

myproject
├── myproject
│   ├── __init__.py    # 用于将 myproject 目录标识为 Python 包
│   ├── asgi.py        # ASGI 应用程序入口点,用于支持异步 Web 服务器
│   ├── settings.py    # 项目的主要设置文件,包括数据库配置、应用程序设置等。
│   ├── urls.py        # URL 路由配置文件,定义了 URL 映射到视图函数的规则。
│   └── wsgi.py        # 用于生产环境部署的 WSGI 应用程序入口点。
├── db.sqlite3         # SQLite 数据库文件,项目中的默认数据库。
└── manage.py          # Django 项目管理工具,用于执行各种管理命令,如启动开发服务器、创建数据库迁移等。

注:我们一般在虚拟环境下安装当前Django项目所需要的依赖,开发完成后,再在该虚拟环境中导出本项目用到的包,而不是系统Python所使用的包。可以使用入下命令导出pip安装过的以来并写入名为 requirements.txt 的文本:

pip freeze > \path\to\requirements.txt       # 替换为你想保存requirements.txt文件的位置

当我们在新的环境中,需要一次性恢复该文本中的依赖时,可以运行以下命令:

pip install -r requirements.txt

不仅仅是Django项目,其它的Python项目也可以使用这种方式完成迁移。

2.2 应用目录(Apps)

一个 Django 项目可以包含多个应用,每个应用负责处理项目中的一个特定功能或模块。每个应用都有自己的目录结构,通常包括以下内容:

  • models.py:定义应用的数据模型,包括数据库表的结构和字段。
  • views.py:定义应用的视图函数,处理 HTTP 请求和生成 HTTP 响应。
  • urls.py:定义应用的 URL 映射规则,将 URL 请求与视图函数关联起来。
  • templates/:存放应用的 HTML 模板文件,用于生成页面内容。
  • static/:存放应用的静态文件,如 CSS、JavaScript、图像等。
  • 其他自定义模块和资源文件。

2.3 配置文件

Django的项目的配置文件通常位于项目根目录同名子目录下的 settings.py 文件,用于配置项目的各种设置,包括数据库连接、静态文件路径、国际化设置等。

2.4 数据库迁移目录

包含了用于数据库迁移的文件,用于管理数据库模式的变化。每当您更改数据模型时,Django 会自动生成新的迁移文件,并可以使用 makemigrationsmigrate 命令来应用这些变化。

2.5 静态文件目录

Django 的静态文件目录用于存放项目中使用的静态文件,包括 CSS 样式表、JavaScript 脚本、图像、字体等。这些静态文件通常不包含动态内容,而是用于渲染网页的外部资源。在 Django 中,您可以配置静态文件的存放位置和访问方式,以便在开发和生产环境中都能正确加载这些资源。

2.5.1 静态文件目录的配置

在 Django 项目的配置文件 settings.py 中,有一个名为 STATIC_URL 的设置,用于定义静态文件的 URL 路径。这是在生成 HTML 页面时引用静态文件的路径。

STATIC_URL = '/static/'

在默认的配置中,STATIC_URL 设置为 /static/,这意味着所有静态文件的 URL 都以 /static/ 开头。

2.5.2 应用中的静态文件

Django 应用程序通常包含一个名为 static 的目录,用于存放该应用的静态文件。这些文件按应用进行组织,每个应用都有自己的 static 目录,内部包含与该应用相关的静态资源。例如:

myapp/├── static/│   └── myapp/│       ├── css/│       │   └── style.css│       ├── js/│       │   └── script.js│       └── img/│           └── logo.png

上面的tree中,myapp 应用有一个与之关联的 static 目录,其中包含了 CSS、JavaScript 和图像文件。从后端的角度看,最常将一些第三方的js和css文件放在这些目录中,如bootstrap、jquery的相关文件。

2.5.3 加载静态文件

在 HTML 模板中,您可以使用 {% static %} 模板标签来加载静态文件。这个标签将根据 STATIC_URL 设置生成正确的 URL 路径。

<link rel="stylesheet" href="{% static 'myapp/css/style.css' %}">
<script src="{% static 'myapp/js/script.js' %}"></script>
<img src="{% static 'myapp/img/logo.png' %}" alt="Logo">

在上述示例中,{% static %} 标签将静态文件的相对路径转换为完整的 URL。

2.5.4 静态文件的收集

在生产环境中,Django 通常不会立即提供静态文件。相反,它会将这些文件收集到一个集中的位置,以提高性能。您可以使用以下命令来收集静态文件:

python manage.py collectstatic

这将把所有应用中的静态文件收集到一个指定的目录,通常是项目根目录下的 static/ 目录。

2.5.5 静态文件的配置选项

Django 还提供了其他一些与静态文件相关的配置选项,例如:

  • STATIC_ROOT:指定用于收集静态文件的根目录。默认情况下,它是项目根目录下的 static/ 目录。在生产环境中,通常需要将其设置为一个 Web 服务器可以访问的路径。

  • STATICFILES_DIRS:一个包含要额外搜索的静态文件目录的列表。通常用于包含项目级别的静态文件,而不是应用级别的。

这些配置选项可以在 settings.py 中进行自定义设置,以满足项目的特定需求。

静态文件目录是 Django 项目中重要的一部分,它使开发人员能够有效地管理和提供静态资源,从而确保网站的外观和功能都正常工作。

2.6 模板目录(Templates)

模板目录 (Templates) 在 Django 项目中起到了关键作用,它用于存放 HTML 模板文件,这些模板被用于生成网页内容。Django 的视图函数会根据请求选择合适的模板进行渲染,并将生成的 HTML 页面返回给用户。下面是关于模板目录的详细讲解,包括如何配置 Django 来查找和使用模板:

2.6.1 模板目录的配置

在 Django 项目的配置文件 settings.py 中,有一个名为 TEMPLATES 的设置,它是一个包含模板配置的列表。这个列表中的每个字典表示一个模板引擎的配置。通常,BACKEND 指定了模板引擎的后端,而 DIRS 则指定了模板文件所在的目录。

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],  # 在这里配置模板目录的路径'APP_DIRS': True,'OPTIONS': {'context_processors': [# ...],},},
]
  • 'DIRS':这是一个包含模板目录路径的列表。您可以在这里指定自定义的模板目录,Django 将在这些目录中查找模板文件。例如,如果您希望将模板文件存放在项目根目录下的 templates/ 文件夹中,可以配置为 'DIRS': [BASE_DIR / 'templates']

2.6.2 APP_DIRS 选项

APP_DIRS 是模板配置中的一个选项,如果设置为 True,Django 将会在每个已安装应用的目录下寻找名为 templates 的子目录,并将其加入模板搜索路径。这意味着每个应用可以有自己的模板目录,方便应用内组织模板。

2.6.3 模板文件的命名规则

Django 模板文件通常以 .html 为扩展名,但也可以使用其他扩展名。模板的命名通常与视图函数或模型相关联,以便更容易理解和管理。例如,如果有一个名为 blog 的应用,该应用中的文章列表页面模板可以命名为 article_list.html

2.6.4 模板继承

Django 的模板系统支持模板继承,这是一种将模板分解为多个可重用块的方式。通过 {% block %} 标签,您可以在基础模板中定义块,然后在子模板中重写这些块。这使得创建具有一致外观和布局的页面变得更加简单。以下是一个示例:

基础模板 base.html

<html>
<head><title>{% block title %}My Site{% endblock %}</title>
</head>
<body><div id="content">{% block content %}{% endblock %}</div>
</body>
</html>

子模板 article_list.html

{% extends "base.html" %}{% block title %}Article List{% endblock %}{% block content %}
<h1>Article List</h1>
<!-- 页面内容 -->
{% endblock %}

在上面的示例中,article_list.html 模板继承了 base.html 模板,并重写了 titlecontent 块。

2.6.5 模板标签和过滤器

Django 提供了丰富的模板标签和过滤器,用于在模板中执行逻辑和处理数据。标签用 {% %} 包裹,过滤器用 {{ }} 包裹。例如,您可以使用 {% for %} 标签循环遍历列表,使用 {{ value|filter }} 语法对变量进行过滤。

{% for article in articles %}<h2>{{ article.title }}</h2><p>{{ article.content|linebreaks }}</p>
{% endfor %}

2.6.6 模板加载顺序

Django 模板系统按照一定的顺序查找模板文件,通常从最特定到最通用的顺序。首先,它查找应用目录下的模板,然后查找自定义目录(如果已配置),最后查找 Django 内置模板目录。

这些是关于 Django 模板目录的基本概念和配置。模板是 Django 中生成动态网页内容的关键部分,能够使您以更清晰和模块化的方式组织网页代码,提高开发效率和可维护性。

2.7 测试文件目录(Tests)

包含项目的测试文件,用于编写和运行单元测试和集成测试。

2.8虚拟隔离环境

Python 虚拟环境用于隔离项目的依赖项,可以在放在项目根目录下的 venv/ 目录中。虚拟环境包含了项目所需的 Python 包,以确保项目的依赖不会与全局 Python 环境冲突。不过这不是强制性的,如果你喜欢,只要能够方便进入该虚拟隔离环境即可。

3. Django的配置文件settings.py

以下是对上述 Django 配置文件 settings.py 中各个部分的小节解析:

3.1 基础路径和文件生成

from pathlib import PathBASE_DIR = Path(__file__).resolve().parent.parent

在这一部分,BASE_DIR 变量被设置为当前配置文件所在目录的上级目录,用于构建项目中的其他路径。

3.2 快速开始开发设置

SECRET_KEY = 'django-insecure-*a00ec65jkjd119ed=e3+1w)gjh15b)7@5hp1z1mh(o*ev&7tg'
DEBUG = True
ALLOWED_HOSTS = []

这里设置了项目的一些快速开发选项,包括密钥、调试模式和允许的主机。请注意,这些设置在生产环境中应该进行修改。

当分析 SECRET_KEYDEBUGALLOWED_HOSTS 这几个配置项时,我们可以详细解释它们的含义和在 Django 项目中的作用。

3.2.1 SECRET_KEY 设置

SECRET_KEY = 'django-insecure-*a00ec65jkjd119ed=e3+1w)gjh15b)7@5hp1z1mh(o*ev&7tg'

SECRET_KEY 是 Django 项目中非常重要的配置项,它用于加密和保护用户会话、密码等敏感数据。这个密钥是用于加密和解密数据的种子。

  • 作用:

    • 保护用户会话: SECRET_KEY 用于签名和验证用户会话,以确保用户登录状态的安全性。
    • 加密密码: 在存储和验证用户密码时,密钥用于加密和解密密码,以确保密码的机密性。
  • 示例:
    通常,SECRET_KEY 的值是一个随机生成的字符串,例如:

    SECRET_KEY = '2m_5#&^ihfw7z(b^^7+0^3wb*gj4%j4*#j%(9-ted-5q(^7p4z'
    

    在生产环境中,不应将实际的密钥硬编码在配置文件中,而是从环境变量中加载,以增加安全性。

3.2.2 DEBUG 设置

DEBUG = True

DEBUG 配置项用于控制是否启用调试模式。在开发过程中,通常将其设置为 True,以获得详细的错误信息和调试工具。在生产环境中,应将其设置为 False,以减少安全风险。

  • 作用:

    • 调试模式: 当 DEBUG 设置为 True 时,Django 将提供详细的错误页面、堆栈跟踪和调试信息,用于开发和调试应用程序。
    • 安全性: 在生产环境中,将 DEBUG 设置为 False 会减少错误信息的暴露,从而提高应用程序的安全性。
  • 示例:
    在开发阶段,可以将 DEBUG 设置为 True,以便查看详细的错误信息。在生产中,应将其设置为 False,例如:

    DEBUG = False
    

3.2.3 ALLOWED_HOSTS 设置

ALLOWED_HOSTS = []

ALLOWED_HOSTS 配置项用于定义允许访问应用程序的主机列表。这是一个安全性配置,用于限制哪些主机可以连接到应用程序。

  • 作用:

    • 安全性: 通过设置 ALLOWED_HOSTS,可以防止恶意主机的请求,从而提高应用程序的安全性。
    • 配置多个域名: 可以将多个域名或 IP 地址添加到 ALLOWED_HOSTS 中,以允许多个主机访问应用程序。
  • 示例:
    在生产环境中,应该将实际的域名或 IP 地址添加到 ALLOWED_HOSTS 中,例如:

    ALLOWED_HOSTS = ['example.com', 'www.example.com', '192.168.1.100']
    

    这将允许 example.comwww.example.com192.168.1.100 访问应用程序,而拒绝其他主机的请求。

总之,SECRET_KEYDEBUGALLOWED_HOSTS 都是 Django 项目中关键的配置项,它们直接影响着项目的安全性和行为。在生产环境中,务必谨慎地配置这些选项以确保应用程序的稳定性和安全性。

3.3 应用程序定义

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

INSTALLED_APPS 列出了项目中安装的应用程序。这些应用程序包括了 Django 提供的一些内置应用,如管理界面、认证系统等。可以看到,在项目创建初,已经安装了一些默认的框架自带应用。

下面将对几个默认自带的应用进行简介。

3.3.1 django.contrib.admin

该应用提供了强大的管理后台界面,用于管理数据库中的数据和 Django 应用程序的配置。允许管理员用户轻松添加、修改和删除数据库记录。管理员可以登录到 /admin 路径,并使用该应用程序管理应用程序的数据库数据。

(如,http://127.0.0.1:8000/admin)
在这里插入图片描述

3.3.2 django.contrib.auth

该应用提供了用户认证和授权系统,包括用户注册、登录、密码重置、用户组等功能。允许管理用户、用户组和权限。用户可以注册账户,登录到应用程序,访问需要身份验证的视图。

3.3.3 django.contrib.contenttypes

该应用提供了内容类型框架,允许创建通用关系并查找模型之间的关联。可用于创建通用外键、反向关联和多态关联。允许模型之间建立关联,如评论模型可以关联到文章或图片模型。

3.3.4 django.contrib.sessions

该应用提供了会话管理功能,用于在 Web 应用程序中存储和检索用户会话数据。可用于实现用户登录状态的跟踪和管理。可以使用会话来存储购物车内容、用户首选项等数据。

3.3.5 django.contrib.messages

该应用提供了消息通知框架,用于向用户显示一次性消息,如成功、错误或信息消息。帮助用户获得有关他们的操作结果的反馈。可以在表单提交后向用户显示成功或错误消息。

3.3.6 django.contrib.staticfiles

该应用用于处理静态文件,如 CSS、JavaScript 和图像文件的收集和提供。管理应用程序中的静态资源,以便能够在模板中使用它们。

3.4 中间件设置

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

MIDDLEWARE 列表包含了在请求和响应处理期间执行的中间件。中间件用于执行不同的任务,例如安全性、会话管理、身份验证等。

3.5 URL 配置(指定跟路由文件)

ROOT_URLCONF = 'myproject.urls'

ROOT_URLCONF 设置用于定义项目中 URL 映射的模块。

3.6 模板配置

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

TEMPLATES 列表配置了项目中模板引擎的选项,包括模板目录和上下文处理器。

3.7 WSGI 应用程序设置

WSGI_APPLICATION = 'myproject.wsgi.application'

WSGI_APPLICATION 设置用于定义项目的 WSGI 应用程序。

3.8 数据库配置

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}

DATABASES 字典包含了项目数据库的配置选项,包括数据库引擎和数据库文件路径。

其中:

  1. 'BACKEND': 用于指定使用的模板引擎后端。比如,通常情况下,这应该设置为 'django.template.backends.django.DjangoTemplates',因为 Django 自带了一个模板引擎后端。

  2. 'DIRS': 包含额外的模板目录路径列表。这些路径用于查找自定义模板文件。例如,如果有自定义模板存放在项目根目录下的 templates 文件夹中,可以将路径添加到此列表中:'DIRS': [BASE_DIR / 'templates'],

  3. 'APP_DIRS': 指定是否要搜索应用程序中的模板目录。例如,设置为 True,以启用应用程序的模板目录搜索。

  4. 'OPTIONS': 包含其他模板引擎选项的字典。例如在 'OPTIONS' 中,可以配置一些其他的选项,如下:

    'OPTIONS': {'context_processors': [  # 上下文处理器'django.template.context_processors.debug',  # 调试信息'django.template.context_processors.request',  # 请求对象'django.contrib.auth.context_processors.auth',  # 认证用户'django.contrib.messages.context_processors.messages',  # 消息通知],'builtins': ['myapp.template_tags.my_template_tag',  # 自定义模板标签],
    },
    
    • 'context_processors' 列表包含上下文处理器的名称,这些处理器可以向模板提供额外的上下文数据。例如,'django.contrib.auth.context_processors.auth' 将向模板提供已认证的用户信息。

    • 'builtins' 包含要在模板中使用的内置标签和过滤器。如果有自定义的模板标签,可以将其添加到此列表中。

这些配置项使得能够自定义项目中的模板引擎行为,包括模板目录、上下文处理器和内置标签。根据项目的需求,可以灵活配置模板引擎以满足需求。

3.9 密码验证设置

AUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]

AUTH_PASSWORD_VALIDATORS 列表定义了密码验证策略,以确保用户密码的安全性。在上面的默认设置中:

  1. 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator':
    这个验证器用于检查密码是否与用户的属性过于相似。它会比较密码与用户的属性(例如用户名)的相似性,并根据设置的相似性要求来判断密码是否安全。

  2. 'django.contrib.auth.password_validation.MinimumLengthValidator':
    此验证器检查密码的最小长度是否满足要求。可以在Django的设置中设置密码的最小长度要求。

  3. 'django.contrib.auth.password_validation.CommonPasswordValidator':
    此验证器用于检查密码是否包含了常见的弱密码,如"password"或"123456"等。它会根据一组常见密码列表来检查密码的强度。

  4. 'django.contrib.auth.password_validation.NumericPasswordValidator':
    这个验证器用于检查密码是否包含数字。它要求密码中必须包含至少一个数字字符。

通过将这些验证器添加到 AUTH_PASSWORD_VALIDATORS 列表中,Django 确保了密码的安全性,以防止用户使用过于简单或容易猜测的密码。这有助于提高系统的安全性,防止密码被恶意攻击或破解。可以根据项目的安全要求自定义这些验证器或添加其他自定义验证器。

3.10 国际化和时区设置

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True

这些设置用于配置项目的国际化和时区。

下面是关于 Django 中国际化和时区设置项的解析,包括可以取的值以及每个值的含义:

3.10.1 LANGUAGE_CODE

是一个字符串,例如 'en-us''es-es' 等。
该设置指定了项目的默认语言和区域设置。它决定了在项目中使用的语言,以及如何格式化日期、时间和数字。

例如,'en-us' 表示美国英语,使用 'zh-hans' 表示中文简体,使用 'zh-hant' 表示中文繁体;使用'fr'表示法语;使用'es-es' 表示西班牙语;使用'ru'表示俄语;使用'fa'表示波斯语;使用'ja'表示日语;使用'ko'表示韩语;使用'la'表示拉丁语等等。

3.10.2 TIME_ZONE

是一个字符串,例如 'UTC''America/New_York' 等。
该设置指定了项目的默认时区。它影响到所有与日期和时间相关的操作,确保它们按照指定的时区进行计算和显示。例如,'UTC' 表示协调世界时,'America/New_York' 表示美国东部时间。

3.10.3 USE_I18N

是一个布尔值 (TrueFalse)。
该设置指示是否启用国际化。如果设置为 True,Django 将尝试根据 LANGUAGE_CODE 配置来本地化项目内容,包括日期、时间和数字格式化。例如,True 表示启用国际化,False 表示禁用国际化。

3.10.4 USE_TZ

是一个布尔值 (TrueFalse)。
该设置指示是否启用时区支持。如果设置为 True,Django 将使用 TIME_ZONE 配置来处理日期和时间,确保它们在指定的时区中正确显示和计算。例如,True 表示启用时区支持,False 表示禁用时区支持。

以上这些设置允许你自定义项目的国际化和时区,以确保应用在不同地区和语言环境下都能正确工作。根据的项目需求,可以根据上述说明来配置这些设置项。

3.11 静态文件设置

STATIC_URL = 'static/'

STATIC_URL 用于定义静态文件的 URL 路径。在Django中,静态文件通常包括CSS、JavaScript、图像和其他前端资源,它们被用于网站的样式和交互功能。它定义了静态文件在网站中的根URL路径。

例如,如果 STATIC_URL 设置为 'static/',那么静态文件的 URL 将以 http://example.com/static/ 开头。

通常情况下,STATIC_URL 的设置以斜杠结尾,以确保静态文件的URL路径正确。这是因为在Django中,静态文件的URL路径是相对于根URL的。

静态文件通常存储在项目的 static 目录中,STATIC_URL 指定了如何访问这些静态文件。

例如,如果有一个名为 style.css 的CSS文件位于 static/css/ 目录中,那么可以通过 STATIC_URL + 'css/style.css' 来访问它。

使用 STATIC_URL 的好处是,当项目需要部署到不同的环境(开发、测试、生产等)时,只需更改 STATIC_URL 的设置,而不必修改模板中的静态文件路径。这样可以提高项目的可维护性和可移植性。

3.12 默认主键字段类型设置

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

DEFAULT_AUTO_FIELD 用于定义模型的默认主键字段类型。在 Django 3.2 版本以及之后的版本中才引入了这个设置,用于指定模型的默认主键字段类型。

DEFAULT_AUTO_FIELD 可以设置为多种不同的值,每个值对应不同的主键字段类型,以满足不同的项目需求。

  1. 'django.db.models.AutoField':
    这是Django默认的主键字段类型。自动生成32位整数类型的主键值。适用于大多数小型到中型应用。

  2. 'django.db.models.BigAutoField':
    自动生成64位整数类型的主键值。适用于处理大型数据集,避免主键值溢出。

  3. 'django.db.models.UUIDField':
    使用UUID(Universally Unique Identifier)作为主键。生成全局唯一的主键值,适用于多个数据库之间数据合并或分布式系统。

  4. 自定义主键字段类型:
    你还可以定义自己的自定义主键字段类型,并在 DEFAULT_AUTO_FIELD 中引用它们。这需要你创建一个继承自 models.Field 的自定义字段类。例如:

    # 自定义主键字段类型
    from django.db import modelsclass MyCustomPrimaryKey(models.Field):def db_type(self, connection):return 'my_custom_type'# 在 settings.py 中使用自定义主键字段类型
    DEFAULT_AUTO_FIELD = 'myapp.models.MyCustomPrimaryKey' # myapp 表示 Django 项目中的一个应用(app)的名称。
    

    这里,myapp 是一个虚拟的示例应用名称,您需要将其替换为实际项目中的应用名称。实际上,DEFAULT_AUTO_FIELD 设置需要引用包含自定义主键字段的应用和模型。这是因为自定义主键字段应该定义在项目的某个应用的模型中。所以,myapp.models.MyCustomPrimaryKey 中的 myapp 是应用的名称,models 是应用中包含自定义主键字段的 Python 模块,MyCustomPrimaryKey 是自定义主键字段的名称。也就是说,如果你的项目中真有一个名为 myapp 的应用,并且在该应用的 models.py 文件中定义了 MyCustomPrimaryKey 字段,那么您可以使用上述设置。否则,请将 myapp 替换为实际的应用名称,并确保自定义主键字段位于该应用中的模型中。

通过设置 DEFAULT_AUTO_FIELD,可以选择适合项目需求的默认主键字段类型,以满足性能和数据管理方面的要求。不同的主键字段类型适用于不同的场景,可以根据项目的特点进行选择。

F. 附:一个真实的初始配置文件

"""
Django settings for myproject project.Generated by 'django-admin startproject' using Django 4.2.5.For more information on this file, see
https://docs.djangoproject.com/en/4.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.2/ref/settings/
"""from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-*a00ec65jkjd119ed=e3+1w)gjh15b)7@5hp1z1mh(o*ev&7tg'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'myproject.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'myproject.wsgi.application'# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/STATIC_URL = 'static/'# Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135704.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Qt4开发曲线绘制交互软件Plotter

目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。 目录 1 需求 2 技术路线 3 开发流程 1 框架搭建 2 菜单…

android 存储新特性

分区存储 本页内容应用访问限制将分区存储与 FUSE 搭配使用 FUSE 和 SDCardFSFUSE 性能微调减轻与 FUSE 相关的性能影响隐私优势远超性能劣势MediaProvider 和 FUSE 更新 分区存储会限制应用访问外部存储空间。在 Android 11 或更高版本中&#xff0c;以 API 30 或更高版本为…

农民朋友有福利啦!建行江门市分行“裕农通+农资结算”平台正式上线

随着广东广圣农业发展有限公司办公室内的裕农通“智慧眼”结算机“叮”的一声到账提醒&#xff0c;标志着全国首个“裕农通农资结算“平台的成功上线&#xff0c;也标志着建行广东省江门市分行的裕农通业务又迈上了一个新的台阶。 广东广圣农业发展有限公司&#xff08;以下简…

MySQL 用户账号管理(Accounts Management)

用户需要通过账号连接到MySQL Server&#xff0c;本文总结了MySQL账号的常用管理操作。 目录 一、用户账号简介 二、账号创建 三、账号权限管理 3.1 权限赋予与回收 3.1.1 库级赋权 3.1.2 表级赋权 3.1.3 列级赋权 3.1.4 存储过程和函数赋权 3.1.5 权限查询 3.1.6 权限回收 3.2…

43.MQ—RabbitMQ

目录 一、MQ—RabbitMQ。 &#xff08;1&#xff09;同步调用与异步调用。 &#xff08;1.1&#xff09;同步调用。 &#xff08;1.2&#xff09;异步调用。 &#xff08;2&#xff09;MQ之间的区别。 &#xff08;3&#xff09;RabbitMQ学习。 &#xff08;3.1&#xf…

Ansys Zemax | 光学系统设计中如何使用玻璃替换方法来优化玻璃

在光学系统中选择最优玻璃材料时&#xff0c;Conrady d-D以及模型玻璃等传统的玻璃选择方法提供的帮助有限。本文介绍了如何使用玻璃替换方法进行直接玻璃优化&#xff0c;以及在考虑玻璃的可用性、成本及耐候性等因素时&#xff0c;如何进一步严格挑选玻璃。 简介 玻璃替换方法…

目标检测前言,RCNN,Fast RCNN,Faster RCNN

一、RCNN&#xff1a; 找到概率最高的目标之后&#xff0c;与其他目标进行IOU交并比计算&#xff0c;若高于一定值&#xff0c;则说明这两张图片预测的是同一个目标&#xff0c;则把概率低的目标删掉 二、Fast RCNN 因为是直接得到特征图之后进行映射&#xff0c;所以不限制输入…

电脑提示丢失MSVCP140.dll是什么意思,总结5个MSVCP140.dll丢失的解决分享

在计算机使用过程中&#xff0c;有时候会出现一些异常情况&#xff0c;比如丢失 MSVCP140.dll 文件。MSVCP140.dll 是 Microsoft Visual C 2015 Redistributable 的一部分&#xff0c;它包含了一些在 C 编程时需要的函数和类。许多程序和游戏都需要依赖这个文件来正常运行。一旦…

u盘内容防止复制(U盘内数据防拷贝的方法)

随着科技的发展&#xff0c;U盘已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;U盘的普及也带来了一些问题&#xff0c;如数据泄露、病毒传播等。因此&#xff0c;保护U盘中的数据安全变得尤为重要。 方法一&#xff1a;设置文件权限 打开U盘&#xff0c;找到…

华为aarch64架构的泰山服务器EulerOS 2.0 (SP8)系统离线安装saltstack3003.1实践

华为泰山服务器的CPU芯片架构为aarch64&#xff0c;所装系统为EulerOS 2.0 (SP8)aarch64系统&#xff0c;安装saltstack比较困难。本文讲解通过pip安装方式离线安装saltstack3003.1以进行集中化管理和维护。 一、系统环境 1、操作系统版本 [rootlocalhost ~]# cat /etc/os-r…

如何将本地的项目上传到Git

一、GitHub or GitLab or Gitee创建一个新的仓库 二、仓库路径创建成功后&#xff0c;将本地项目上传到git 1. 进入本地项目所在文件夹位置&#xff0c;右击 2.出现git命令框 输入git init 在当前项目的目录中生成本地的git管理&#xff08;会发现在当前目录下多了一个.git文件…

Redis模块二:缓存分类 + Redis模块三:常见缓存(应用)

缓存大致可以分为两大类&#xff1a;1&#xff09;本地缓存 2&#xff09;分布式缓存 目录 本地缓存 分布式缓存 常见缓存的使用 本地缓存&#xff1a;Spring Cache 分布式缓存&#xff1a;Redis 本地缓存 本地缓存也叫单机缓存&#xff0c;也就是说可以应⽤在单机环…

DirectX12(d3d12)初始化

一、前置要求 Windows 10及以上(安装有DirectX12)VisualStudio 2022 二、DirectX12入门 1.引用头文件 #include<Windows.h> #include<d3d12.h> #include<dxgi1_4.h>2.注册窗口类并初始化窗口 这里我们调用Windows API 通过应用程序的句柄来注册一个唯一…

Maven 安装配置

Maven 安装配置 文章目录 Maven 安装配置一、下载 Maven二、解压Maven核心程序三、指定本地仓库四、配置阿里云镜像仓库4.1 将原有的例子配置注释掉4.2 加入新的配置 五、配置 Maven 工程的基础 JDK 版本六、配置环境变量6.1 检查 JAVAHOME 配置是否正确6.2 配置 MAVENHOME6.3 …

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

007-第一代软件需求整理

第一代软件需求整理 文章目录 第一代软件需求整理项目介绍需求来源需求来源1&#xff1a;竞品软件分析需求来源2&#xff1a;医生&#xff08;市场&#xff09;需求来源3&#xff1a;项目组内部需求来源4&#xff1a;软件组内部需求来源5&#xff1a;软件开发成员需求来源6&…

Python 元组的常用方法

视频版教程 Python3零基础7天入门实战视频教程 下标索引用法和列表一样&#xff0c;唯一区别就是不能修改元素 实例&#xff1a; # 下标索引用法和列表一样&#xff0c;唯一区别就是不能修改元素 t1 ("java", "python", "c") # t1[1] "…

95.qt qml-诺谦通用可扩展多功能QML界面

支持如下所示: 1.可扩展多功能交互&#xff0c;用户可以根据自己喜欢使用常用功能&#xff0c;针对多功能项目非常有用&#xff01;2.登录用户信息显示&#xff0c;历史消息显示&#xff0c;皮肤黑白风格切换 如下图所示: 自带一个功能界面&#xff0c;可以通过功能界面添加不…

Python爬虫:获取必应图片的下载链接

文章目录 1. 前言2. 实现思路3. 运行结果 1. 前言 首先&#xff0c;说明一下&#xff0c;本篇博客内容可能涉及到版权问题&#xff0c;为此&#xff0c;小编只说明一下实现思路&#xff0c;至于全部参考代码&#xff0c;小编不粘贴出来。不过&#xff0c;小编会说明详细一些&a…

0918hw

字节序概念&#xff1a; 字节序是不同cpu主机&#xff0c;存储多字节整数序列的存储方式 1.大端存储&#xff1a;低字节序存储在地址高位 2.小端存储&#xff1a;低字节序存储在地址低位 3.无论大小端存储&#xff0c;首地址都是低地址&#xff0c;数据都是先读取低地址&am…