Cookiecutter Django:快速构建生产级Django项目的终极指南
Cookiecutter Django是一个基于Cookiecutter的框架,专门用于快速生成遵循最佳实践的Django项目结构。它不仅仅是一个简单的项目模板,而是一个完整的开发框架,集成了众多预配置的功能和现代化的开发工具链。项目采用分层架构设计,遵循12-Factor应用原则,通过环境变量进行配置管理,确保开发、测试和生产环境的一致性。
Cookiecutter Django项目概述与核心价值
在现代Web开发中,快速启动一个生产就绪的Django项目往往需要大量的配置工作和最佳实践整合。Cookiecutter Django应运而生,它是一个基于Cookiecutter的框架,专门用于快速生成遵循最佳实践的Django项目结构。这个项目不仅仅是一个简单的项目模板,而是一个完整的开发框架,集成了众多预配置的功能和现代化的开发工具链。
项目架构设计理念
Cookiecutter Django采用了分层架构设计,将配置、应用逻辑和基础设施清晰分离。整个项目结构遵循12-Factor应用原则,通过环境变量进行配置管理,确保开发、测试和生产环境的一致性。
核心功能特性
Cookiecutter Django提供了丰富的开箱即用功能,涵盖了现代Web应用开发的各个方面:
1. 安全性与最佳实践
项目默认采用安全至上的设计理念,包含以下安全特性:
- SSL强制启用:所有连接默认使用SSL加密
- 安全的Cookie设置:Session和CSRF Cookie都启用HttpOnly标志
- X-Frame防护:默认设置X-Frame-Options为DENY
- 密码哈希:使用Argon2作为首选密码哈希算法
# 安全配置示例
SESSION_COOKIE_HTTPONLY = True
CSRF_COOKIE_HTTPONLY = True
X_FRAME_OPTIONS = "DENY"
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
]
2. 环境配置管理
采用django-environ进行12-Factor应用配置管理,支持多环境配置:
| 环境类型 | 配置文件 | 主要用途 |
|---|---|---|
| 开发环境 | local.py | 本地开发和调试 |
| 生产环境 | production.py | 生产环境部署 |
| 测试环境 | test.py | 自动化测试 |
| 基础配置 | base.py | 共享通用配置 |
# 环境变量配置示例
import environ
env = environ.Env()
DEBUG = env.bool("DJANGO_DEBUG", False)
DATABASES = {"default": env.db("DATABASE_URL")}
3. 现代化开发工具链
项目集成了完整的开发工具生态系统:
- 测试覆盖:100%的初始测试覆盖率
- 代码质量:集成pre-commit、Black、Ruff等工具
- 前端构建:支持Webpack、Gulp等多种前端构建工具
- API开发:可选Django REST Framework集成
技术栈集成
Cookiecutter Django精心挑选并集成了业界领先的技术栈:
认证与用户管理
- django-allauth:提供完整的用户认证系统
- 自定义用户模型:预先配置好的扩展用户模型
- 多因素认证:支持MFA(多因素认证)
数据库与缓存
- PostgreSQL:默认使用PostgreSQL数据库
- Redis:用于缓存和Celery消息队列
- 数据库版本支持:PostgreSQL 13-17版本
前端开发
- Bootstrap 5:现代化的响应式前端框架
- 多种构建工具:支持Webpack、Gulp、Django Compressor
- 静态资源优化:生产环境静态文件优化
部署与运维支持
Cookiecutter Django提供了全面的部署解决方案:
容器化部署
# Docker Compose配置示例
version: '3.8'
services:
web:
build: ./compose/local/django
command: python /app/manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
environment:
- DATABASE_URL=postgres://postgres:postgres@db:5432/postgres
云平台支持
项目支持多种云平台部署:
| 云平台 | 服务集成 | 部署方式 |
|---|---|---|
| AWS | S3, SES, RDS | ECS/EB部署 |
| Google Cloud | Cloud Storage | GKE部署 |
| Azure | Blob Storage | AKS部署 |
| Heroku | 原生支持 | Git部署 |
监控与日志
- Sentry集成:错误监控和性能追踪
- 结构化日志:生产环境日志管理
- 健康检查:应用健康状态监控
开发体验优化
Cookiecutter Django极大地提升了开发体验:
快速启动流程
# 安装Cookiecutter
pip install "cookiecutter>=1.7.0"
# 生成项目
cookiecutter https://github.com/cookiecutter/cookiecutter-django
# 回答配置问题
# 项目自动生成并配置完成
开发工具集成
- PyCharm配置:预配置的IDE设置
- VS Code支持:开发环境配置
- 调试工具:Django Debug Toolbar集成
社区与生态
Cookiecutter Django拥有活跃的社区支持和丰富的生态系统:
- 持续维护:定期更新依赖和安全性修复
- 文档完善:详细的使用文档和最佳实践指南
- 扩展生态:多个衍生版本和定制模板
项目的核心价值在于它不仅仅节省了项目初始化的时间,更重要的是确保每个新项目都遵循业界最佳实践,具备生产就绪的安全性和可维护性。通过标准化的项目结构和配置,团队可以快速上手,减少配置错误,提高开发效率。
无论是初创公司快速验证产品想法,还是大型企业构建标准化应用,Cookiecutter Django都提供了一个可靠的基础框架,让开发者可以专注于业务逻辑的实现,而不是基础设施的搭建。
项目架构设计与最佳实践理念
Cookiecutter Django 项目采用了一套精心设计的架构模式,遵循现代 Django 开发的最佳实践。该架构设计不仅考虑了开发效率,还充分考虑了生产环境的可扩展性、安全性和维护性。
分层架构设计
Cookiecutter Django 采用了经典的三层架构模式,确保代码的清晰分离和职责单一:
配置管理策略
项目采用环境变量驱动的配置管理,遵循12-Factor应用原则:
# config/settings/base.py 中的配置管理示例
import environ
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
env = environ.Env()
READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=False)
if READ_DOT_ENV_FILE:
env.read_env(str(BASE_DIR / ".env"))
# 环境变量配置示例
DEBUG = env.bool("DJANGO_DEBUG", False)
DATABASES = {"default": env.db("DATABASE_URL")}
这种配置策略的优势:
| 配置方式 | 优点 | 缺点 |
|---|---|---|
| 环境变量 | 安全、可移植、符合12-Factor | 需要额外文档说明 |
| .env文件 | 开发环境方便、版本可控 | 生产环境不安全 |
| 硬编码 | 简单直接 | 不安全、不可移植 |
应用模块化设计
项目采用高度模块化的应用结构,每个功能模块都有清晰的职责边界:
用户认证系统设计
项目采用自定义用户模型,支持两种认证方式:
# 基于邮箱的用户模型
class User(AbstractUser):
name = CharField(_("Name of User"), blank=True, max_length=255)
first_name = None
last_name = None
email = EmailField(_("email address"), unique=True)
username = None
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = UserManager()
认证流程设计:
静态资源管理
项目提供多种静态资源处理方案:
| 方案 | 适用场景 | 特点 |
|---|---|---|
| Whitenoise | 简单部署 | 内置静态文件服务 |
| Amazon S3 | 生产环境 | 高可用、可扩展 |
| Google Cloud Storage | GCP环境 | 与GCP生态集成 |
| Webpack | 前端复杂项目 | 模块化打包 |
| Gulp | 传统前端工作流 | 任务自动化 |
数据库设计最佳实践
# 数据库配置示例
DATABASES = {
"default": env.db(
"DATABASE_URL",
default="postgres://localhost/{{cookiecutter.project_slug}}",
)
}
DATABASES["default"]["ATOMIC_REQUESTS"] = True
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
数据库设计原则:
- 使用PostgreSQL作为默认数据库
- 支持数据库连接池
- 原子性请求确保数据一致性
- 明确的迁移管理策略
安全架构设计
项目内置多重安全防护机制:
# 安全配置示例
SESSION_COOKIE_HTTPONLY = True
CSRF_COOKIE_HTTPONLY = True
X_FRAME_OPTIONS = "DENY"
# 密码哈希配置
PASSWORD_HASHERS = [
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
]
安全防护层次:
异步任务处理架构
对于需要异步处理的任务,项目集成Celery:
# Celery配置
CELERY_BROKER_URL = env("REDIS_URL", default="redis://localhost:6379/0")
CELERY_TIMEZONE = TIME_ZONE
# 异步任务示例
@app.task
def send_welcome_email(user_id):
user = User.objects.get(id=user_id)
# 发送欢迎邮件逻辑
日志与监控设计
项目采用结构化的日志记录策略:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"verbose": {
"format": "%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s",
},
},
"handlers": {
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "verbose",
},
},
"root": {"level": "INFO", "handlers": ["console"]},
}
测试架构设计
项目采用全面的测试策略:
| 测试类型 | 覆盖范围 | 工具 |
|---|---|---|
| 单元测试 | 模型、视图、表单 | pytest/unittest |
| 集成测试 | API端点、用户流程 | Django Test Client |
| E2E测试 | 完整用户旅程 | Selenium(可选) |
| 性能测试 | 响应时间、负载 | Locust(可选) |
部署架构设计
项目支持多种部署方案:
这种架构设计确保了项目从开发到生产的平滑过渡,每个环境都有相应的配置和优化策略。
通过这种精心设计的架构,Cookiecutter Django 为开发者提供了一个既符合现代Web开发最佳实践,又具备高度可定制性的项目基础框架。
主要功能特性与集成组件介绍
Cookiecutter Django不仅仅是一个简单的项目模板,它是一个功能完备的生产级Django应用框架,集成了现代Web开发所需的各种优秀组件和最佳实践。让我们深入探索其核心功能特性和集成的强大组件。
认证与用户管理系统
Cookiecutter Django内置了完整的用户认证系统,基于django-allauth提供强大的多因素认证支持:
# config/settings/base.py
THIRD_PARTY_APPS = [
"allauth",
"allauth.account",
"allauth.mfa", # 多因素认证支持
"allauth.socialaccount", # 社交媒体登录
]
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
]
AUTH_USER_MODEL = "users.User" # 自定义用户模型
用户模型已经预先配置好,支持邮箱作为用户名,并包含完整的管理界面:
# {{cookiecutter.project_slug}}/users/models.py
class User(AbstractUser):
"""Default user for {{cookiecutter.project_name}}."""
name = models.CharField(_("Name of User"), blank=True, max_length=255)
email = models.EmailField(_("email address"), unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
def get_absolute_url(self):
return reverse("users:detail", kwargs={"pk": self.pk})
现代化的前端构建系统
根据项目需求,Cookiecutter Django支持多种前端构建方案:
| 构建方案 | 描述 | 适用场景 |
|---|---|---|
| Django Compressor | Django原生静态文件压缩 | 简单项目 |
| Gulp | 基于任务的构建工具 | 中等复杂度项目 |
| Webpack | 模块化打包工具 | 复杂前端应用 |
REST API开发支持
当选择启用DRF(Django REST Framework)时,项目会自动配置完整的API开发环境:
# config/settings/base.py
if cookiecutter.use_drf == "y":
THIRD_PARTY_APPS += [
"rest_framework",
"rest_framework.authtoken",
"corsheaders",
"drf_spectacular", # API文档生成
]
# REST Framework配置
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication",
],
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
}
异步任务处理系统
Celery集成提供了强大的异步任务处理能力:
# config/celery_app.py
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
app = Celery("{{cookiecutter.project_slug}}")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
# 示例任务
@app.task(bind=True, ignore_result=True)
def debug_task(self):
print(f"Request: {self.request!r}")
数据库与缓存配置
项目默认使用PostgreSQL数据库,并集成了Redis作为缓存和消息队列:
# 数据库配置
DATABASES = {
"default": env.db(
"DATABASE_URL",
default="postgres://localhost/{{cookiecutter.project_slug}}",
)
}
# Redis缓存配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": env("REDIS_URL"),
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"IGNORE_EXCEPTIONS": True,
},
}
}
邮件服务集成
支持多种邮件服务提供商,通过Anymail实现统一接口:
| 邮件服务 | 配置键 | 特点 |
|---|---|---|
| Mailgun | MAILGUN | 默认选择,稳定可靠 |
| Amazon SES | AMAZON_SES | AWS生态集成 |
| SendGrid | SENDGRID | 企业级服务 |
| 自定义SMTP | OTHER_SMTP | 灵活自定义 |
# 邮件配置示例
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"
ANYMAIL = {
"MAILGUN_API_KEY": env("MAILGUN_API_KEY"),
"MAILGUN_SENDER_DOMAIN": env("MAILGUN_DOMAIN"),
}
监控与错误追踪
Sentry集成提供生产环境错误监控:
# 当启用Sentry时自动配置
if env.bool("USE_SENTRY", default=False):
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn=env("SENTRY_DSN"),
integrations=[DjangoIntegration()],
traces_sample_rate=env.float("SENTRY_TRACES_SAMPLE_RATE", default=1.0),
send_default_pii=True,
)
安全最佳实践
项目内置了多项安全措施:
- HTTPS强制: 生产环境自动启用SSL
- 安全头设置: 配置了X-Frame-Options、CSP等安全头
- 密码哈希: 使用Argon2作为默认密码哈希算法
- CSRF保护: 完整的CSRF令牌保护机制
- 会话安全: 安全的Cookie设置和会话管理
# 安全配置
SECURE_SSL_REDIRECT = env.bool("SECURE_SSL_REDIRECT", default=True)
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
开发工具与质量保证
集成了现代开发所需的各类工具:
| 工具类型 | 工具名称 | 用途 |
|---|---|---|
| 代码格式化 | Black | Python代码格式化 |
| 导入排序 | isort | 导入语句排序 |
| 代码检查 | Ruff | 快速代码检查 |
| 类型检查 | mypy | 静态类型检查 |
| 测试框架 | pytest | 测试运行器 |
# pyproject.toml 中的工具配置
[tool.ruff]
line-length = 88
select = ["E", "F", "W", "I", "N", "C", "B", "A", "RUF"]
ignore = ["E501", "W503"]
容器化与部署支持
完整的Docker支持,包含开发和生产环境配置:
# compose/local/django/Dockerfile
FROM python:3.12-slim-bookworm
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
部署支持包括:
- Heroku: 通过Procfile配置
- Docker: 完整的docker-compose配置
- PythonAnywhere: 专用部署指南
- AWS/GCP/Azure: 云平台特定配置
通过以上集成的组件和功能,Cookiecutter Django为您提供了一个真正生产就绪的Django项目起点,涵盖了从开发到部署的完整生命周期需求。
项目生成选项与配置参数详解
Cookiecutter Django 提供了丰富的配置选项,让开发者能够根据项目需求定制化生成Django项目。这些选项涵盖了项目基本信息、技术栈选择、第三方服务集成等多个方面,确保生成的项目既符合最佳实践又满足特定需求。
核心项目配置参数
项目的基础配置参数决定了项目的标识和基本设置:
| 参数名 | 类型 | 默认值 | 描述 | 影响范围 |
|---|---|---|---|---|
project_name | 字符串 | "My Awesome Project" | 项目的人类可读名称,允许使用大写字母和空格 | README、文档、项目标识 |
project_slug | 字符串 | 自动生成 | 项目的slug版本,不含破折号或空格,用于Python导入 | 目录结构、模块导入 |
description | 字符串 | "Behold My Awesome Project!" | 项目描述,用于文档和元数据 | README、项目文档 |
author_name | 字符串 | "Daniel Roy Greenfeld" | 作者姓名,用于许可证和文档 | LICENSE、配置元数据 |
email | 字符串 | 自动生成 | 作者邮箱地址,基于作者姓名和域名生成 | 项目配置、联系方式 |
domain_name | 字符串 | "example.com" | 项目部署后的域名 | 配置设置、部署配置 |
version | 字符串 | "0.1.0" | 项目初始版本号 | 项目元数据、版本管理 |
这些基础参数通过以下流程影响项目生成:
技术栈与架构选择
Cookiecutter Django 提供了多种技术栈选项,让开发者能够选择最适合项目需求的架构:
数据库配置
# PostgreSQL版本选择配置示例
POSTGRESQL_VERSIONS = {
"17": "PostgreSQL 17",
"16": "PostgreSQL 16",
"15": "PostgreSQL 15",
"14": "PostgreSQL 14",
"13": "PostgreSQL 13"
}
前端构建工具
前端构建管道的选择直接影响开发工作流和部署配置:
| 选项 | 描述 | 适用场景 | 生成文件 |
|---|---|---|---|
| None | 不使用前端构建工具 | 简单项目,静态资源较少 | 基础静态文件结构 |
| Django Compressor | Django压缩工具 | 传统Django项目,需要简单压缩 | 压缩配置、静态文件优化 |
| Gulp | 基于任务的构建工具 | 需要复杂前端工作流 | Gulpfile、任务配置 |
| Webpack | 模块打包工具 | 现代前端开发,组件化 | Webpack配置、模块化支持 |
第三方服务集成
项目支持多种第三方服务的集成配置:
邮件服务提供商
邮件服务配置通过Django-Anymail实现,支持以下提供商:
- Mailgun: 默认选择,提供良好的API和文档支持
- Amazon SES: AWS用户的首选,成本效益高
- Mailjet: 提供可视化邮件编辑界面
- SendGrid: 企业级邮件发送服务
- Postmark: 专注于事务性邮件
- Brevo: 原名SendinBlue,提供营销自动化
- SparkPost: 高性能邮件发送
- 其他SMTP: 自定义SMTP服务器配置
云存储提供商
云存储选项影响静态文件和媒体文件的处理方式:
| 提供商 | 配置文件 | 依赖包 | 部署要求 |
|---|---|---|---|
| AWS S3 | storages.py | django-storages[boto3] | AWS凭证配置 |
| Google Cloud Storage | storages.py | django-storages[google] | GCP服务账户 |
| Azure Storage | storages.py | django-storages[azure] | Azure存储账户 |
| None | 本地存储 | 无额外依赖 | Nginx或Whitenoise |
开发工具与环境配置
编辑器支持
Cookiecutter Django 为不同编辑器提供特定的配置支持:
# 编辑器配置示例
EDITOR_CHOICES = [
("None", "不使用特定编辑器"),
("PyCharm", "JetBrains PyCharm"),
("VS Code", "Visual Studio Code")
]
# PyCharm特定配置生成逻辑
if editor == "PyCharm":
generate_pycharm_config()
setup_pycharm_run_configurations()
elif editor == "VS Code":
generate_vscode_settings()
setup_vscode_debug_config()
Docker集成
Docker支持是一个重要的配置选项,它影响开发、测试和部署的整个工作流:
当选择使用Docker时,项目会生成:
- 开发环境Docker配置: 包括Django、PostgreSQL、Redis等服务
- 生产环境Docker配置: 优化过的生产级容器配置
- Nginx配置: 反向代理和静态文件服务
- Traefik配置: 现代化的反向代理和负载均衡
高级功能与集成选项
异步支持
异步处理选项允许项目使用WebSocket和其他异步功能:
# 异步配置示例
if use_async == "y":
# 启用ASGI配置
configure_asgi_application()
# 设置Uvicorn服务器
setup_uvicorn_config()
# 添加WebSocket支持
add_websocket_routing()
Celery任务队列
Celery集成提供分布式任务处理能力:
| 配置选项 | 生成内容 | 依赖项 | 使用场景 |
|---|---|---|---|
| use_celery: y | Celery配置、任务示例 | celery[redis] | 后台任务、定时任务 |
| use_celery: n | 移除Celery相关文件 | 无 | 简单应用,无需异步任务 |
监控与错误追踪
Sentry集成提供生产环境错误监控:
# Sentry配置逻辑
if use_sentry == "y":
# 添加Sentry SDK依赖
add_requirement("sentry-sdk[django]")
# 生成Sentry配置
generate_sentry_config()
# 设置环境变量
setup_sentry_env_vars()
持续集成与部署配置
CI工具选择影响测试和部署自动化:
| CI工具 | 配置文件 | 测试命令 | 部署支持 |
|---|---|---|---|
| GitHub Actions | .github/workflows/ | pytest | 自动部署到多种平台 |
| GitLab CI | .gitlab-ci.yml | pytest | GitLab Pages部署 |
| Travis CI | .travis.yml | pytest | 传统CI/CD支持 |
| Drone CI | .drone.yml | pytest | 容器化CI/CD |
环境变量与安全配置
项目采用12-Factor应用原则,使用环境变量进行配置:
# 环境变量管理示例
class EnvironmentConfig:
"""管理环境变量配置"""
def __init__(self):
self.secret_key = self._get_secret_key()
self.database_url = self._get_database_url()
self.email_config = self._get_email_config()
def _get_secret_key(self):
"""生成或获取Django密钥"""
return os.environ.get('SECRET_KEY') or generate_random_key()
def _setup_env_files(self):
"""根据配置选项生成环境文件"""
if use_docker == "y":
self._generate_docker_env_files()
else:
self._generate_standard_env_files()
配置选项的相互依赖关系
某些配置选项之间存在依赖关系,需要特别注意:
这种依赖关系确保生成的配置是一致的和可工作的。例如:
- 选择Docker时,会自动配置相应的容器化数据库和缓存服务
- 选择云存储提供商时,会生成相应的存储后端配置
- 启用Celery时,会配置Redis作为消息代理
最佳实践配置建议
根据项目类型推荐以下配置组合:
Web应用项目:
- 前端管道: Webpack (现代前端开发)
- 邮件服务: Mailgun (开发者友好)
- 云存储: AWS S3 (成熟稳定)
- CI工具: GitHub Actions (生态丰富)
API服务项目:
- use_drf: y (必需)
- 前端管道: None (纯API服务)
- 监控: Sentry (错误追踪)
- 异步: 根据需求选择
传统企业应用:
- Docker: n (可能已有基础设施)
- 前端管道: Django Compressor (简单易用)
- 数据库: PostgreSQL 14/15 (稳定版本)
通过合理配置这些选项,Cookiecutter Django能够生成完全符合项目需求的、生产就绪的Django项目基础结构。
总结
Cookiecutter Django通过丰富的配置选项和智能的依赖管理,为开发者提供了一个高度定制化且生产就绪的Django项目基础框架。从项目基础信息、技术栈选择到第三方服务集成,每个配置选项都经过精心设计,确保生成的项目既符合最佳实践又满足特定需求。无论是Web应用、API服务还是传统企业应用,通过合理配置这些选项,开发者都能获得一个完全符合项目需求的、具备生产级安全性和可维护性的Django项目起点,从而可以专注于业务逻辑的实现而非基础设施的搭建。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



