Loading... # Julia Evans Django 入门学习笔记技术分析 # 一、新闻概述 ## 1. 标题 Julia Evans 分享 Django 入门学习笔记:从 Rails 到 Django 的实践体验 ## 2. 发布时间 2026 年 1 月 27 日 ## 3. 来源 Julia Evans 个人博客(jvns.ca) # 二、核心内容 ## 1. 事件摘要 ### A. 主要内容 Julia Evans 分享了她开始学习 Django Web 框架的体验和笔记,对比了 Django 与 Rails 的差异,并介绍了 Django 的核心特性。 ### B. 核心亮点 - Django 比 Rails 更显式化,易于长期维护 - 内置 Admin 界面极大提升开发效率 - ORM 设计优雅,支持复杂关系查询 - 自动迁移功能简化数据库 schema 变更 - "电池内置"设计理念,集成常用功能 ## 2. 关键信息 ### A. 作者背景 Julia Evans 是知名技术博主,擅长系统编程和网络技术 ### B. 学习动机 - 长期以来想学习流行的 Web 框架(Rails/Django/Laravel) - 需要构建一个需要数据库管理界面的网站项目 - 偏爱使用 20 年以上历史的成熟技术栈 ### C. 技术选型 选择 Django 而非继续使用 Rails 的主要原因:代码显式化,便于长期项目维护 ## 3. 背景介绍 ### A. Rails 体验 作者在 2020 年曾尝试学习 Rails,但遇到以下问题: - 约定过于隐式,长时间未维护后难以理解 - 需要记忆大量惯例,如 `resources :topics` 的路由配置 ### B. Django 选择 Django 采用更显式的设计,主要文件结构清晰: - urls.py:URL 路由配置 - models.py:数据模型定义 - views.py:视图逻辑处理 - admin.py:管理后台配置 - tests.py:测试代码 # 三、详细报道 ## 1. 主要内容 ### A. 与 Rails 的对比 **Rails 特点**: - 高度约定优于配置 - 代码简洁但隐式逻辑多 - 适合快速开发,但长期维护成本高 **Django 特点**: - 显式化配置,代码即文档 - 文件结构清晰,职责分明 - 更适合长时间间隔后继续维护的项目 ### B. 内置 Admin 界面 Django 最受欢迎的特性之一是内置的管理后台,可通过简单配置实现强大的数据管理功能。 **Admin 配置示例**: ```python @admin.register(Zine) class ZineAdmin(admin.ModelAdmin): list_display = ["name", "publication_date", "free", "slug", "image_preview"] search_fields = ["name", "slug"] readonly_fields = ["image_preview"] ordering = ["-publication_date"] ``` **功能说明**: - list_display:列表视图显示字段 - search_fields:可搜索的字段 - readonly_fields:只读字段 - ordering:默认排序规则 ### C. ORM 设计 Django ORM 使用双下划线 `__` 表示表关联(JOIN),语法简洁直观。 **复杂查询示例**: ```python Zine.objects.exclude(product__order__email_hash=email_hash) ``` 这个查询涉及 5 个表的 JOIN: - zines(杂志表) - zine_products(杂志-产品关联表) - products(产品表) - order_products(订单-产品关联表) - orders(订单表) 只需在模型中定义 ManyToManyField 关系,Django 自动处理表关联。 ### D. 自动迁移 Django 的数据库迁移系统是另一个亮点: **工作流程**: 1. 在 models.py 中添加、删除或修改字段 2. Django 自动生成迁移脚本(如 migrations/0006_delete_imageblob.py) 3. 执行迁移命令应用变更 **优势**: - 自动检测模型变更 - 生成可版本控制的迁移脚本 - 支持回滚和多环境部署 ### E. 文档质量 Django 拥有优秀的文档传统: - 结构清晰,示例丰富 - Jacob Kaplan-Moss 在 PyCon 2011 的演讲确立了文档文化 - 模型文档列出了常用字段类型和用法 ### F. SQLite 生产环境实践 作者选择在生产环境使用 SQLite,理由如下: **Postgres 问题**: - 运维复杂度高 - 问题排查困难 **SQLite 优势**: - 单文件数据库,备份简单(VACUUM INTO 命令) - 无需额外服务 - 适合低写入场景 **适用场景**: - 日写入量数百次以内 - 远低于 Mess with DNS 项目的写入量(该项目使用 3 个 SQLite 数据库运行良好) ### G. 电池内置设计 Django 提供了开箱即用的功能: - CSRF 保护 - 内容安全策略(Content-Security-Policy) - 邮件发送功能 **邮件配置示例**: 开发环境(保存到文件): ```python EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend" EMAIL_FILE_PATH = BASE_DIR / "emails" ``` 生产环境(SMTP): ```python EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "smtp.whatever.com" EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = "xxxx" EMAIL_HOST_PASSWORD = os.getenv('EMAIL_API_KEY') ``` ### H. 配置文件挑战 Django 的配置系统也存在一些不足: - 使用全局变量配置 - 缺少类型检查支持 - 拼写错误难以发现(如 WSGI_APPLICATOIN vs WSGI_APPLICATION) **系统架构图**: ```mermaid graph TB Request[HTTP 请求] --> Middleware[中间件层] Middleware --> URLRouter[URL 路由器] URLRouter --> View[视图函数] View --> ORM[ORM 层] ORM --> DB[(SQLite 数据库)] View --> Template[模板引擎] Template --> Response[HTTP 响应] Admin[Admin 界面] --> ORM ``` ## 2. 技术细节 ### A. Django MVT 架构 Django 采用 MVT(Model-View-Template)架构模式: ```mermaid graph LR Model[Model 模型层] --> View[View 视图层] View --> Template[Template 模板层] Template --> View View --> Model ```  **组件职责**: - Model:数据模型和业务逻辑 - View:请求处理和响应生成 - Template:页面渲染和展示 ### B. ORM 关系映射 Django 支持多种关系类型: - ForeignKey:多对一 - ManyToManyField:多对多 - OneToOneField:一对一 **关系查询示例**: ```python # 跨表查询 Zine.objects.filter(product__category__name='technology') # 聚合查询 from django.db.models import Count Zine.objects.annotate(product_count=Count('product')) ``` ### C. 中间件机制 Django 请求处理流程中的中间件链: ```mermaid sequenceDiagram participant C as 客户端 participant M1 as 中间件1 participant M2 as 中间件2 participant V as 视图 participant M3 as 中间件3 participant M4 as 中间件4 C->>M1: 请求 M1->>M2: 请求前处理 M2->>V: 请求 V-->>M3: 响应 M3->>M4: 响应后处理 M4-->>C: 响应 ```  **常用中间件**: - SecurityMiddleware:安全头设置 - SessionMiddleware:会话管理 - CsrfViewMiddleware:CSRF 保护 - AuthenticationMiddleware:用户认证 - MessageMiddleware:消息框架 ### D. 数据库迁移系统 **迁移工作流程**: ```mermaid graph TB Change[修改 models.py] --> Detect[django-admin makemigrations] Detect --> Migrate[django-admin migrate] Migrate --> Update[(数据库更新)] Update --> Version[迁移版本记录] ```   **迁移文件示例**: ```python # Generated by Django X.X from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('app', '0005_initial'), ] operations = [ migrations.AddField( model_name='zine', name='image_preview', field=models.TextField(blank=True, null=True), ), ] ``` ## 3. 数据与事实 ### A. 作者项目规模 - 日写入量:数百次以内 - 数据库选择:SQLite 单文件 - 部署方式:未详细说明 ### B. 对比项目 - Mess with DNS:日写入量更高,使用 3 个 SQLite 数据库 ### C. 技术栈总结 - Web 框架:Django - 数据库:SQLite(生产环境) - Python 版本:未说明(推测 3.8+) - 部署环境:未说明 # 四、影响分析 ## 1. 行业影响 ### A. Django 持续流行 - 20 年历史的老牌框架依然活跃 - 与 Rails、Laravel 并列为三大 Web 框架 - 适合快速开发和长期维护 ### B. SQLite 生产环境趋势 - 越来越多项目选择 SQLite 用于低并发场景 - 简化部署和运维 - 减少基础设施复杂度 ### C. ORM 技术演进 - ORM 不再被视为"不酷"的技术 - 开发者更关注开发效率而非极致性能 - 复杂关系查询的 DSL 设计得到认可 ## 2. 用户影响 ### A. 现有用户 - 确认 Django 在易用性和可维护性之间的平衡 - 内置功能减少第三方依赖 - 适合小团队和个人项目 ### B. 潜在用户 - 从 Rails 转向 Django 的开发者有了实际参考 - SQLite 生产实践降低了入门门槛 - 长期项目维护成本可控 ### C. 迁移成本 - 从其他框架迁移:需要学习 MVT 模式 - 从 Go/静态站点迁移:需要适应动态 Web 开发思维 - 学习曲线:中等,文档完善 ## 3. 技术趋势 ### A. 显式化配置回潮 - Rails 的"约定优于配置"在长期维护中暴露问题 - 开发者更关注代码可读性和可维护性 - 类型系统和静态检查逐渐普及 ### B. 电池内置 vs 微框架 - Django/Flask 之争映射到其他语言生态 - 全栈框架 vs 组合式框架各有适用场景 - Django 证明"电池内置"策略依然有效 ### C. 数据库选型多元化 - 不是所有项目都需要 PostgreSQL/MySQL - SQLite 在合适的场景下完全够用 - 云原生时代简化基础设施成为趋势 # 五、各方反应 ## 1. 官方回应 无直接官方回应,但 Django 项目持续更新。 ## 2. 业内评价 ### A. 社区反馈 - Mastodon 评论区活跃 - 多数人认可 Django 的显式化设计 - SQLite 生产实践引发讨论 ### B. 技术观点 - Marco Rogers:推动作者尝试 ORM - 社区普遍赞同 Django 文档质量 - Admin 界面被认为是 Django 的杀手级功能 ## 3. 用户反馈 ### A. 正面评价 - Django 学习曲线平缓 - 长期维护友好 - 内置功能节省时间 ### B. 关注点 - 配置文件缺乏类型检查 - 全局变量配置不够优雅 - 大型项目可能需要额外架构设计 ### C. 中立观察 - Django 不是银弹,适合中小型项目 - ORM 性能在高并发场景需要优化 - 需要根据项目需求选择技术栈 # 六、相关链接 ## 1. 原文链接 - [Some notes on starting to use Django](https://jvns.ca/blog/2026/01/27/some-notes-on-starting-to-use-django/) ## 2. 相关资源 - [Django 官方文档](https://docs.djangoproject.com/) - [Jacob Kaplan-Moss - Django's Documentation Culture (PyCon 2011)](https://www.youtube.com/watch?v=6jybwlE-0Ig) - [Mess with DNS](https://messwithdns.com/) - 作者的高写入量 SQLite 项目参考 ## 3. 扩展阅读 - [Django Girls Tutorial](https://tutorial.djangogirls.org/) - [Two Scoops of Django](https://www.feldroy.com/books/two-scoops-of-django-3-x) - [SQLite in Production](https://www.sqlite.org/whentouse.html) *** ## 参考资料 1. [Some notes on starting to use Django - Julia Evans Blog](https://jvns.ca/blog/2026/01/27/some-notes-on-starting-to-use-django/) 最后修改:2026 年 01 月 29 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏