2026 Django 开发者调查启动:你的技术栈数据正在塑造框架的未来

2026-05-12 20 预计阅读时间:1 分钟
来源:djangoproject.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:9 分钟

Django 软件基金会与 JetBrains 再次联手,正式启动 2026 Django Developers Survey。这不是一次普通的"填问卷拿奖品"活动——过去几轮调查的数据直接影响了 Django 的技术路线和社区资源分配。如果你在日常工作中依赖 Django,你的真实使用情况就是最有价值的反馈。

为什么开发者调查值得认真对待

每一轮调查结果都会公开发布聚合数据。这些数据被用来:

  • 判断哪些功能需要优先维护或弃用——比如异步视图的采用率、旧版 Python 的残留比例,直接影响 DEP(Django Enhancement Proposal)的推进优先级。
  • 识别社区断层——哪些地区缺少本地化支持、新手入门障碍在哪里,都从地理和经验分布数据中暴露出来。
  • 为生态工具提供方向——第三方包维护者会参考调查结果决定兼容策略,比如是否继续支持 Django 3.2 LTS。

上一轮调查揭示了不少有意思的趋势:PostgreSQL 依然是绝对主流数据库,但 SQLite 的占比在小型项目中明显上升;DRF(Django REST Framework)仍是 API 开发首选,但 Ninja 的渗透率开始抬头。这些结论不是凭空猜出来的,而是来自几千名开发者的一手数据。

填问卷前,先搞清楚自己的技术栈

调查会问你用的 Django 版本、Python 版本、数据库后端、部署方式、主要第三方包等。与其临时回忆,不如跑一段脚本把当前项目的关键信息提取出来,填问卷时直接参考。

下面这个脚本可以挂在你任何一个 Django 项目的根目录下运行:

#!/usr/bin/env python
# save as inspect_django_stack.py and run: python inspect_django_stack.py

import sys
import os

def main():
    # 确保 Django 项目设置已加载
    # 如果你的项目用 manage.py 启动,需要指定 settings 模块
    settings_module = os.environ.get("DJANGO_SETTINGS_MODULE")
    if not settings_module:
        # 尝试自动检测常见配置
        for candidate in ["myproject.settings", "config.settings", "settings"]:
            try:
                os.environ["DJANGO_SETTINGS_MODULE"] = candidate
                import django
                django.setup()
                settings_module = candidate
                break
            except Exception:
                continue
    else:
        import django
        django.setup()

    from django.conf import settings

    print("=" * 50)
    print("Django 项目技术栈速查")
    print("=" * 50)

    # Django 与 Python 版本
    import django
    print(f"Python 版本:   {sys.version}")
    print(f"Django 版本:   {django.VERSION}  (即 {django.get_version()})")

    # 数据库后端
    db_configs = settings.DATABASES
    for alias, config in db_configs.items():
        engine = config.get("ENGINE", "未设置")
        # 简化引擎名称
        engine_short = engine.split(".")[-1] if "." in engine else engine
        print(f"数据库 [{alias}]: {engine_short}")

    # 已安装的 Django 应用
    installed = settings.INSTALLED_APPS
    third_party = [a for a in installed if not a.startswith("django.") and not a.startswith(("admin", "auth", "contenttypes", "sessions", "messages", "staticfiles"))]
    print(f"第三方/自定义 App 数量: {len(third_party)}")
    if third_party:
        print("  主要第三方包:")
        for app in third_party[:15]:
            print(f"    - {app}")
        if len(third_party) > 15:
            print(f"    ... 及另外 {len(third_party) - 15} 个")

    # 关键配置项
    print(f"DEBUG 模式:    {settings.DEBUG}")
    print(f"ASGI 配置:     {getattr(settings, 'ASGI_APPLICATION', '未设置')}")
    print(f"WSGI 配置:     {getattr(settings, 'WSGI_APPLICATION', '未设置')}")

    # 模板引擎
    template_engines = settings.TEMPLATES
    for i, engine in enumerate(template_engines):
        backend = engine.get("BACKEND", "").split(".")[-1]
        print(f"模板引擎 [{i}]: {backend}")

    # 静态文件存储后端
    static_storage = getattr(settings, "STATICFILES_STORAGE", getattr(settings, "STORAGES", {}).get("staticfiles", {}).get("BACKEND", "django.contrib.staticfiles.storage.StaticFilesStorage"))
    static_short = static_storage.split(".")[-1] if "." in static_storage else static_storage
    print(f"静态文件存储:  {static_short}")

    # 国际化
    use_i18n = getattr(settings, "USE_I18N", False)
    lang = getattr(settings, "LANGUAGE_CODE", "en-us")
    print(f"国际化 (i18n): {use_i18n}  默认语言: {lang}")

    print("=" * 50)
    print("以上信息可直接用于填写开发者调查问卷")

if __name__ == "__main__":
    main()

运行方式——在你的 Django 项目目录下:

# 如果你的 settings 模块是 myproject.settings
DJANGO_SETTINGS_MODULE=myproject.settings python inspect_django_stack.py

# 或者直接通过 manage.py 触发
python manage.py shell -c "
import django, sys
django.setup()
from django.conf import settings
print(f'Django: {django.get_version()}')
print(f'Python: {sys.version_info.major}.{sys.version_info.minor}')
print(f'DB engines: {[db[\"ENGINE\"].split(\".\")[-1] for db in settings.DATABASES.values()]}')
print(f'3rd-party apps: {[a for a in settings.INSTALLED_APPS if not a.startswith(\"django.\")]}')
"

第二种方式更轻量,不需要额外脚本文件,一行命令就能拿到核心数据。

参与方式与渠道分发

调查链接按社交平台做了区分,方便统计来源分布。选择你常用的平台入口即可:

平台 链接
Bluesky https://surveys.jetbrains.com/s3/bs-django-developers-survey-2026
Django Forum https://surveys.jetbrains.com/s3/df-django-developers-survey-2026
LinkedIn https://surveys.jetbrains.com/s3/li-django-developers-survey-2026
Mastodon https://surveys.jetbrains.com/s3/md-django-developers-survey-2026
Reddit https://surveys.jetbrains.com/s3/r-django-developers-survey-2026
X / Twitter https://surveys.jetbrains.com/s3/x-django-developers-survey-2026

JetBrains 会从完整填写且内容有意义的参与者中随机抽取 10 人,每人发放 100 美元 Amazon 礼品卡(或等值本地货币)。但更实际的价值在于:调查结果公开后,你可以对照全社区的数据审视自己的技术选型是否偏离主流、是否踩了别人已经踩过的坑。

传播比填写更重要

Django 官方明确呼吁:填完问卷后,花一分钟转发到你所在的社区。原因很简单——回答越多样,数据越有用。如果只有北美全职工程师的数据,结论会严重偏向大型部署场景;如果兼职开发者、学生、非英语地区的用户也大量参与,才能真实反映全球生态。

几个传播建议:

  • 公司内部 Slack/Discord:直接贴链接,比发到公共社交平台更容易触达和你用同一套技术栈的人。
  • 本地技术社区:中文 Django 社区、高校技术社团的覆盖度历来偏低,转发时加一句"填完可以对照结果看自己是不是主流用法"会提高参与意愿。
  • 开源项目维护者:如果你维护某个 Django 第三方包,在 README 或 Issue 里提一句调查链接,你的用户群体数据对包的兼容策略至关重要。

填写前的快速检查清单

  • [ ] 确认自己当前主力项目的 Django 版本和 Python 版本(跑上面的脚本)
  • [ ] 回忆部署方式:裸机 / Docker / Kubernetes / 云平台(Heroku、Render 等)
  • [ ] 列出最依赖的 3-5 个第三方包(DRF、Celery、django-debug-toolbar 等)
  • [ ] 确认数据库后端和缓存后端
  • [ ] 想清楚你在 Django 生态里最希望改进的地方——这部分是开放文本,最有影响力

调查关闭后聚合数据会公开发布。届时不妨回头看看:你的技术栈和全球趋势是否一致,你踩的痛点是不是社区共同的痛点。这才是填问卷的真正回报。


相关推荐