【Python】Django从零开始

一、Django 概述:是什么、为什么以及核心理念 (Introduction to Django: The “What”, “Why”, and Core Philosophy)

1.1. Django 是什么?(What is Django?)

Django 是一个基于 Python 的高级 Web 应用框架,它遵循 MVT (Model-View-Template) 设计模式(有时也被称作 MTV,其中 T 代表 Template,V 代表 View,M 代表 Model,这与常见的 MVC 模式中的 Controller 角色由 Django 框架自身和 URL 配置共同承担)。Django 的核心目标是使开发者能够快速、高效地构建复杂、数据驱动的网站和 Web 应用,同时保持代码的简洁、可维护性和可扩展性。

它的标语是“完美主义者的最后期限框架” (The web framework for perfectionists with deadlines),这精确地概括了它的设计哲学:提供一套完整且强大的工具集,让开发者不必从零开始“重复造轮子”,从而可以专注于业务逻辑的实现。

Django 最初是为了管理美国劳伦斯出版集团旗下的一些新闻网站而开发的,并于2005年7月开源。由于其出色的设计和强大的功能,迅速成为 Python Web 开发领域最受欢迎的框架之一。

1.2. Django 的核心设计哲学 (Core Design Philosophies)

理解 Django 的设计哲学对于高效使用它至关重要:

  1. DRY (Don’t Repeat Yourself - 不要重复你自己):
    这是软件工程中的一个基本原则,Django 在其各个层面都力求贯彻。例如,通过 ORM (Object-Relational Mapper) 定义一次数据模型,就可以在数据库迁移、表单生成、Admin 后台管理等多个地方复用。模板继承也体现了 DRY 原则,允许将通用的页面结构抽取到基础模板中。

  2. Convention over Configuration (约定优于配置):
    Django 为项目的结构、命名方式等提供了合理的默认约定。例如,应用内的模板通常放在 templates/<app_name>/ 目录下,静态文件放在 static/<app_name>/ 目录下。遵循这些约定可以减少大量的显式配置工作,使得项目结构更加清晰和统一。当然,Django 也提供了足够的灵活性,允许开发者在需要时覆盖这些约定。

  3. Explicit is better than implicit (显式优于隐式 - Python之禅):
    Django 的设计力求清晰明了。例如,URL 配置是显式定义的,中间件的加载顺序也是明确的。这使得开发者更容易理解代码的行为和数据流向。

  4. Batteries Included (功能齐全,开箱即用):
    Django 提供了一个功能非常完备的生态系统,包括:

    • 强大的 ORM,用于数据库交互。
    • 自动化的 Admin 管理后台。
    • 优雅的 URL 路由系统。
    • 灵活的模板引擎。
    • 表单处理和验证机制。
    • 用户认证和权限系统。
    • 缓存框架。
    • 国际化和本地化支持。
    • 安全防护机制(如 CSRF、XSS 保护)。
    • 站点地图生成框架。
    • RSS/Atom Feed 生成框架。
    • …等等。
      这意味着许多常见的 Web 开发需求,Django 都有内置的解决方案,开发者不必再去寻找和集成大量第三方库(尽管 Django 也拥有庞大的第三方包生态系统来扩展其功能)。
  5. 快速开发 (Rapid Development):
    得益于其“功能齐全”的特性和清晰的架构,Django 能够显著提高开发效率。尤其是对于内容驱动型网站和具有标准 CRUD (Create, Read, Update, Delete) 操作的应用,使用 Django 可以非常快速地搭建出原型并投入使用。

  6. 安全性 (Security):
    Django 非常重视安全性,并内置了多种常见的 Web 安全威胁的防护措施,例如:

    • SQL 注入保护: ORM 默认使用参数化查询。
    • 跨站脚本攻击 (XSS) 保护: 模板引擎默认对变量进行 HTML 转义。
    • 跨站请求伪造 (CSRF) 保护: 内置 CSRF 中间件和模板标签。
    • 点击劫持保护: 通过 X-Frame-Options 中间件。
      Django 团队有专门的安全策略,并会及时发布安全补丁。
  7. 可扩展性 (Scalability):
    Django 的组件化设计使其具有良好的可扩展性。可以将应用的不同部分解耦,并根据需要独立扩展。它支持多种缓存策略,可以与负载均衡器、分布式任务队列等配合使用,以应对高并发场景。许多大型网站(如 Instagram, Pinterest (早期), Disqus)都成功地使用了 Django。

1.3. MVT (Model-View-Template) 架构模式

Django 遵循 MVT 架构模式,这是 MVC (Model-View-Controller) 模式的一种变体。

  • Model (模型):

    • 职责: 定义数据的结构和行为,是应用程序中唯一、确定的数据源。它包含了数据的字段和方法,负责与数据库进行交互(通过 Django 的 ORM)。
    • 对应 Django 组件: 主要在应用的 models.py 文件中定义,通过继承 django.db.models.Model 类来创建。
  • View (视图):

    • 职责: 接收 HTTP 请求,处理业务逻辑,并返回 HTTP 响应。视图函数或类从模型获取数据,选择合适的模板进行渲染,并将渲染结果或特定数据(如 JSON)作为响应返回给客户端。它扮演了传统 MVC 中 Controller 的角色的一部分。
    • 对应 Django 组件: 主要在应用的 views.py 文件中定义,可以是函数(Function-Based Views, FBVs)或类(Class-Based Views, CBVs)。
  • Template (模板):

    • 职责: 定义数据的呈现方式,即用户界面的外观。模板是一个包含静态 HTML 部分和动态占位符(用于插入数据)的文本文件。Django 的模板引擎会根据视图传递的上下文数据来渲染模板,生成最终的 HTML。
    • 对应 Django 组件: 通常是 HTML 文件,使用 Django Template Language (DTL) 编写,存放在应用的 templates 目录下。
  • URL Dispatcher (URL分发器/路由):

    • 虽然不直接是 MVT 的一部分,但它是连接用户请求和视图的关键。Django 通过 urls.py 文件中定义的 URL 模式,将传入的 HTTP 请求路由到相应的视图函数或类进行处理。这部分功能以及框架本身的一些协调工作可以看作是 MVC 中 Controller 的另一部分职责。

数据流转过程大致如下:

  1. 用户通过浏览器发送一个 HTTP 请求到某个 URL。
  2. Django 的 URL 分发器根据 urls.py 中的配置,找到与该 URL 匹配的视图。
  3. 如果匹配成功,URL 分发器调用对应的视图函数或类的处理方法,并将 HttpRequest 对象以及从 URL 中捕获的参数传递给它。
  4. 视图函数/方法执行业务逻辑:
    • 可能需要通过模型与数据库交互(查询、创建、更新、删除数据)。
    • 可能会处理表单数据、用户认证等。
  5. 视图函数/方法准备好要显示的数据(称为上下文 context)。
  6. 视图选择一个模板,并将上下文数据传递给模板引擎。
  7. 模板引擎使用上下文数据渲染模板,生成最终的 HTML 字符串。
  8. 视图将渲染后的 HTML 封装成一个 HttpResponse 对象返回给 URL 分发器。
  9. 最终,HttpResponse 被发送回用户的浏览器。
1.4. 为什么选择 Django?(Why Choose Django?)

选择一个 Web 框架是一个重要的决策,以下是选择 Django 的一些主要理由:

  1. Python 语言的优势: Python 本身是一门易学易用、语法简洁、拥有庞大标准库和第三方库生态的语言。Django 充分利用了 Python 的这些优点。
  2. 开发速度快: “Batteries included” 的特性使得开发者可以快速搭建功能完善的应用。Admin 后台的自动生成尤其能节省大量后台管理界面的开发时间。
  3. 功能强大且全面: 从 ORM 到表单处理,从用户认证到模板引擎,Django 提供了一整套成熟的解决方案。
  4. 高度安全: 内置多种安全防护机制,帮助开发者避免常见的 Web 安全漏洞。
  5. 良好的可扩展性: 组件化的设计和对缓存、数据库分片等的支持,使得 Django 应用能够很好地扩展以应对高流量。
  6. 成熟的生态系统: 拥有大量的第三方应用和包 (django-rest-framework, celery, django-debug-toolbar 等),可以轻松扩展 Django 的功能。
  7. 优秀的文档: Django 拥有世界一流的官方文档,内容详尽、组织清晰,是学习和解决问题的宝贵资源。
  8. 活跃的社区: 庞大且活跃的开发者社区意味着遇到问题时更容易找到帮助,也有源源不断的新包和工具涌现。
  9. 广泛的应用案例: 许多知名网站和应用使用 Django 构建,证明了其在真实生产环境中的稳定性和可靠性(例如 Instagram, Pinterest (早期), Disqus, Mozilla, National Geographic, Spotify (部分服务))。
  10. ORM 的便利性: Django ORM 使得数据库操作更加 Pythonic,避免了直接编写复杂的 SQL 语句(虽然也支持原生 SQL),并且支持多种数据库后端 (PostgreSQL, MySQL, SQLite, Oracle 等)。
  11. 强大的 Admin 后台: 这是 Django 的一大特色,只需少量配置甚至零配置,就能自动生成一个功能强大的数据管理后台,极大地提高了内容管理和数据维护的效率。
1.5. Django 与其他框架的简要对比 (Brief Comparison with Other Frameworks)
  • Django vs. Flask/FastAPI (Python):

    • Flask: 是一个微框架 (micro-framework),核心非常轻量,只提供最基本的功能(如路由、模板渲染)。其他功能(如 ORM、表单、认证)需要通过选择和集成第三方扩展来实现。Flask 给予开发者更大的灵活性和选择权,适合小型项目、API 开发或希望对技术栈有完全控制的场景。
    • FastAPI: 是一个现代、高性能的 Python Web 框架,专为构建 API 而设计,基于标准的 Python 类型提示。它具有自动数据校验、序列化和API文档生成 (Swagger UI, ReDoc) 的特性,并且天然支持异步编程 (async/await)。如果主要目标是构建高性能的 API 服务,FastAPI 是一个非常优秀的选择。
    • Django: 是一个全功能框架 (full-stack framework),提供了更多开箱即用的功能。对于需要完整网站功能(包括前端模板、Admin后台、用户系统等)的复杂项目,Django 通常能提供更快的开发速度。Django 也逐渐增强了对异步和 API 构建的支持 (如通过 Django REST framework 和 ASGI)。
  • Django vs. Ruby on Rails (Ruby):

    • Rails 是 Ruby 语言中最流行的 Web 框架,与 Django 在设计哲学上有很多相似之处(如 Convention over Configuration, DRY)。两者都是全功能框架,提供了强大的 ORM (Active Record for Rails, Django ORM for Django) 和丰富的功能集。
    • 主要区别在于使用的语言 (Ruby vs. Python) 及其各自的生态系统。选择哪个往往取决于团队对语言的熟悉程度和偏好。Python 在数据科学、机器学习领域有更广泛的应用,这可能使得 Django 在需要集成这些功能的项目中更具优势。
  • Django vs. Node.js 框架 (e.g., Express.js, NestJS - JavaScript/TypeScript):

    • Node.js 框架利用 JavaScript 的非阻塞 I/O 模型,非常适合构建高并发、I/O 密集型的应用(如聊天应用、实时数据服务)。
    • Express.js 类似于 Flask,是一个轻量级、灵活的框架。NestJS 则更像一个全功能的、面向企业级应用的框架,借鉴了 Angular 的设计思想,并使用 TypeScript。
    • 选择 Django 还是 Node.js 框架通常取决于项目对 I/O 性能的要求、团队对 JavaScript/Python 的熟悉度以及生态系统的需求。Python 在同步代码的编写和传统数据密集型应用方面仍然有其优势,而 Django 的成熟度和“batteries included”特性对快速构建完整应用非常有吸引力。

总的来说,没有绝对的“最佳”框架,选择应基于项目需求、团队技能、开发效率、性能要求和生态系统支持等因素综合考虑。Django 在构建内容驱动的网站、企业级应用、需要快速迭代的项目以及拥有成熟 Admin 后台需求的场景中表现尤为出色。

二、搭建 Django 开发环境 (Setting Up the Development Environment)

在开始编写第一个 Django 应用之前,我们需要配置好本地的开发环境。这通常包括安装 Python、设置虚拟环境、安装 Django 以及选择合适的开发工具。

2.1. 安装 Python (Installing Python)

Django 是一个 Python 框架,所以首先你需要安装 Python。

  • 检查现有 Python 版本:
    打开你的终端或命令提示符,输入:

    python --version
    # 或者,如果你的系统同时安装了 Python 2 和 Python 3,可能需要用:
    python3 --version
    

    确保你安装了 Django 支持的 Python 版本。Django 的不同版本对 Python 版本有不同的要求。通常,最新的 Django LTS (Long-Term Support) 版本或最新稳定版会支持较新的 Python 3.x 版本。建议查阅 Django 官方文档中关于支持的 Python 版本说明。例如,Django 4.2 支持 Python 3.8, 3.9, 3.10, 3.11。Django 5.0 支持 Python 3.10, 3.11, 3.12。
    建议安装 Python 3.10 或更高版本以获得对最新 Django 版本的良好支持。

  • 下载和安装 Python:
    如果你的 Python 版本过低或未安装,请访问 Python 官方网站 python.org 下载适合你操作系统的最新稳定版 Python 安装包。

    • Windows: 下载可执行安装程序。在安装过程中,务必勾选 “Add Python to PATH” 或 “Add python.exe to Path” 选项,这样可以在命令行中直接使用 python 命令。
    • macOS: 可以通过官网下载安装包,或者使用 Homebrew (brew install python3)。
    • Linux: 大多数 Linux 发行版预装了 Python。如果没有或版本较低,可以使用系统的包管理器安装 (如 sudo apt update && sudo apt install python3 python3-pip python3-venv for Debian/Ubuntu, or sudo yum install python3 python3-pip for Fedora/CentOS)。
  • pip (Python 包安装器):
    pip 是 Python 的包管理工具,通常会随 Python 一起安装。你可以通过以下命令检查 pip 是否安装成功并更新到最新版本:

    python -m pip --version # 检查 pip 版本
    # 或者 python3 -m pip --version
    python -m pip install --upgrade pip # 升级 pip
    # 或者 python3 -m pip install --upgrade pip
    
2.2. 虚拟环境 (Virtual Environments)

在开始 Django 项目之前,强烈建议为每个项目创建一个独立的虚拟环境。虚拟环境可以将项目的依赖包与全局 Python 环境或其他项目的依赖包隔离开来,避免版本冲突,并保持项目依赖的清洁。

常用的虚拟环境工具有 venv (Python 3.3+ 内置) 和 virtualenv (第三方包,功能更强大一些,但 venv 通常足够)。

2.2.1. 使用 venv 创建虚拟环境
  1. 选择或创建项目目录:
    打开终端,导航到你希望存放 Django 项目的目录,或者创建一个新目录。

    mkdir my_django_projects # 创建一个存放所有项目的文件夹 (可选)
    cd my_django_projects
    mkdir my_first_project_dir # 为当前项目创建一个特定目录
    cd my_first_project_dir
    

    my_first_project_dir 就是你的项目根目录。

  2. 创建虚拟环境:
    在你的项目根目录 (my_first_project_dir) 下,运行以下命令创建一个名为 venv (或你喜欢的任何名称,如 .venv, env) 的虚拟环境:

    python -m venv venv
    # 或者 python3 -m venv venv
    

    这会在当前目录下创建一个名为 venv 的文件夹,其中包含了 Python 解释器的一个副本以及管理包所需的脚本。

  3. 激活虚拟环境:
    创建虚拟环境后,需要激活它才能使用。激活命令因操作系统而异:

    • Windows (cmd.exe):
      venv\Scripts\activate.bat
      
    • Windows (PowerShell):
      首先,你可能需要允许脚本执行。以管理员身份运行 PowerShell,执行:
      Set-ExecutionPolicy Unrestricted -Scope CurrentUser
      
      然后,在你的项目目录下的 PowerShell 中执行:
      venv\Scripts\Activate.ps1
      
    • macOS 和 Linux (bash/zsh):
      source venv/bin/activate
      

    激活成功后,你的命令提示符通常会显示虚拟环境的名称(例如 (venv) C:\path\to\my_first_project_dir>(venv) user@host:~/my_django_projects/my_first_project_dir$ ),表明当前使用的是虚拟环境中的 Python 和 pip。

2.2.2. 为什么使用虚拟环境如此重要?
  • 依赖隔离: 不同项目可能需要不同版本的同一个库。虚拟环境确保每个项目都有其独立的、特定版本的依赖包,避免了全局安装可能导致的冲突。例如,项目 A 可能需要 requests==2.20.0,而项目 B 需要 requests==2.25.0
  • 环境复现: 你可以将项目依赖项列表(通常是 requirements.txt 文件)分享给其他开发者或部署到服务器,他们可以使用这个列表在新的虚拟环境中精确地重现项目的依赖环境。
  • 保持全局环境清洁: 避免在系统的全局 Python 环境中安装大量特定于项目的包。
  • 权限问题: 在某些系统上,向全局 Python 环境安装包可能需要管理员权限。虚拟环境允许你在用户空间内管理包,无需特殊权限。
2.3. 安装 Django (Installing Django)

确保你的虚拟环境已激活。然后,使用 pip 安装 Django:

  1. 安装最新稳定版 Django:

    pip install django
    

    这会下载并安装 Django 的最新稳定版本及其必要的依赖项。

  2. 安装特定版本的 Django (可选):
    如果需要安装特定版本的 Django(例如,某个 LTS 版本或为了与现有项目兼容):

    pip install django==4.2.7 # 安装 Django 4.2.7 版本
    

    你可以去 PyPI (Python Package Index - pypi.org) 查找 Django 可用的版本。

  3. 升级 Django (可选):
    如果之后需要升级已安装的 Django 版本:

    pip install --upgrade django
    
2.4. 验证 Django 安装 (Verifying Django Installation)

安装完成后,可以通过以下几种方式验证 Django 是否成功安装在你的虚拟环境中:

  1. 在 Python 解释器中检查:
    在激活的虚拟环境的终端中,输入 pythonpython3 进入 Python 交互式解释器:

    # (venv) $ python
    Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import django
    >>> print(django.get_version())
    5.0 # 这里会显示你安装的 Django 版本号,例如 5.0, 4.2.7 等
    >>> exit()
    

    如果没有报错并且能打印出版本号,说明 Django 已成功安装。

  2. 使用 django-admin 命令:
    django-admin 是 Django 的命令行工具,用于执行各种管理任务。

    # (venv) $ django-admin --version
    5.0 # 同样会显示 Django 版本号
    
2.5. 开发工具推荐 (Recommended Development Tools)

选择合适的开发工具可以显著提高开发效率。

  1. 代码编辑器 / IDE:

    • Visual Studio Code (VS Code):
      • 免费、开源、轻量级且功能强大。
      • 拥有庞大的扩展生态系统,特别是 Microsoft 官方的 Python 扩展,提供了优秀的 Django 支持(如智能提示、代码补全、调试、Linting、格式化)。
      • 集成了终端和 Git 版本控制。
      • 推荐安装的 VS Code 扩展:
        • Python (by Microsoft)
        • Pylance (by Microsoft - Python 语言服务器,提供更强的智能感知)
        • Django (by Baptiste Darthenay - 提供 Django 模板和代码片段支持)
        • Prettier - Code formatter (或 Black Formatter for Python)
        • GitLens (增强 Git 功能)
    • PyCharm (Professional Edition):
      • JetBrains 公司出品的强大的 Python IDE,对 Django 有深度集成和原生支持。
      • 提供了非常全面的功能,包括高级调试、代码分析、数据库工具、版本控制集成、Docker 支持等。
      • Professional 版本是付费的,但它也提供了一个免费的 Community Edition(对 Django 的支持不如专业版全面)。
      • 对于专业的 Django 开发,PyCharm Professional 是一个非常受欢迎的选择。
    • 其他选项: Sublime Text, Atom, Vim, Emacs 等,这些编辑器也可以通过插件和配置来很好地支持 Django 开发,但可能需要更多的手动设置。
  2. Web 浏览器:
    你需要一个现代的 Web 浏览器来查看和测试你的 Django 应用。

    • Google Chrome: 拥有强大的开发者工具 (DevTools)。
    • Mozilla Firefox: 同样拥有优秀的开发者工具。
    • Microsoft Edge (Chromium-based): 也具备与 Chrome 类似的 DevTools。
      熟悉浏览器开发者工具(特别是网络(Network)标签、元素(Elements)检查、控制台(Console)以及应用(Application)标签下的存储查看)对于 Web 开发至关重要。
  3. 版本控制系统 - Git:
    Git 是目前最流行的分布式版本控制系统。强烈建议使用 Git 来管理你的 Django 项目代码。

    • 安装 Git:git-scm.com 下载并安装。
    • 学习 Git 基础: 了解 git init, git add, git commit, git status, git branch, git checkout, git merge, git pull, git push 等基本命令。
    • 代码托管平台: 使用 GitHub, GitLab, Bitbucket 等平台来托管你的 Git 仓库,方便协作和备份。
    • .gitignore 文件: 创建一个 .gitignore 文件来告诉 Git 忽略不需要版本控制的文件和目录(如虚拟环境文件夹 venv/, 编译的 Python 文件 __pycache__/, *.pyc, 数据库文件如 db.sqlite3 (如果是用于开发测试的),以及IDE的配置文件等)。一个典型的 Django .gitignore 文件可能如下:
      # .gitignore for a Django project
      
      # Byte-compiled / optimized / DLL files
      __pycache__/
      *.py[cod]
      *$py.class
      
      # C extensions
      *.so
      
      # Distribution / packaging
      .Python
      build/
      develop-eggs/
      dist/
      downloads/
      eggs/
      .eggs/
      lib/
      lib64/
      parts/
      sdist/
      var/
      wheels/
      pip-wheel-metadata/
      share/python-wheels/
      *.egg-info/
      .installed.cfg
      *.egg
      MANIFEST
      
      # PyInstaller
      # Обычно создается pyinstaller --onedir
      *.manifest
      *.spec
      
      # Installer logs
      pip-log.txt
      pip-delete-this-directory.txt
      
      # Unit test / coverage reports
      htmlcov/
      .tox/
      .nox/
      .coverage
      .coverage.*
      .cache
      nosetests.xml
      coverage.xml
      *.cover
      *.py,cover
      .hypothesis/
      .pytest_cache/
      
      # Translations
      *.mo
      # *.pot
      
      # Django stuff:
      *.log
      local_settings.py # 本地特定配置,不应提交
      db.sqlite3 # 开发用的SQLite数据库文件
      db.sqlite3-journal
      media/ # 用户上传的媒体文件 (根据策略决定是否忽略)
      static_root/ # collectstatic 生成的静态文件根目录 (通常在生产环境生成)
      
      # Virtual Environments
      .env
      .venv
      env/
      venv/
      ENV/
      env.bak/
      venv.bak/
      
      # Spyder project settings
      .spyderproject
      .spyderworkspace
      
      # Rope project settings
      .ropeproject
      
      # PyCharm files
      .idea/
      *.iml
      
      # VS Code files
      .vscode/
      
      # SQLite
      *.sqlite3-shm
      *.sqlite3-wal
      
      # Environments
      .envrc
      envdir/
      
      # Celery stuff
      celerybeat-schedule
      celerybeat.pid
      
      # Sass
      .sass-cache/
      # Static folder (if you compile static files into it)
      # staticfiles/
      
      # dotenv
      .env.* # .env.development, .env.production, etc.
      !.env.example # 除非你想共享一个示例
      
      # node.js
      node_modules/
      npm-debug.log
      yarn-error.log
      package-lock.json # 如果团队都用npm可以提交,如果混合用npm和yarn,可能需要忽略
      yarn.lock # 同上
      
      # Other
      *.swp
      *~
      desktop.ini
      Thumbs.db
      .DS_Store
      
  4. 数据库 (Database):

    • 开发阶段: Django 默认使用 SQLite3,这是一个轻量级的基于文件的数据库。SQLite 对于开发和小型应用非常方便,因为它不需要单独的服务器设置,数据库就是一个文件(通常是 db.sqlite3)。
    • 生产阶段: 对于生产环境,通常会选择更健壮的数据库系统,如 PostgreSQL (推荐,与 Django 功能契合度最高)、MySQL、MariaDB 或 Oracle。我们将在后续章节中详细讨论数据库的配置和使用。

三、创建你的第一个 Django 项目 (Creating Your First Django Project)

Django 项目是构成一个完整网站或 Web 应用的所有配置和应用的集合。

3.1. django-admin startproject 命令详解

Django 提供了一个命令行工具 django-admin,用于执行各种 Django 相关的管理任务。其中,startproject 命令用于创建一个新的 Django 项目。

3.1.1. 命令的基本用法和参数

确保你的虚拟环境已经激活,并且 Django 已经安装。

  1. 导航到你的项目集合目录 (可选):
    如果你有一个统一存放所有项目的目录(例如我们之前创建的 my_django_projects),先 cd 进去。

    # (venv) $ cd path/to/my_django_projects
    
  2. 执行 startproject 命令:
    该命令的基本语法是:

    # (venv) $ django-admin startproject projectname [directory]
    
    • projectname: 这是你为 Django 项目指定的名称。它将用作 Python 包的名称(例如,在 import projectname.settings 时使用),所以它必须是合法的 Python 包名(通常是小写字母、数字和下划线,不以数字开头,不使用 Python 关键字)。
    • [directory] (可选): 这是一个可选参数,用于指定存放项目的目录。
      • 如果省略 [directory] 参数: Django 会在当前目录下创建一个名为 projectname 的新目录,并在该目录下生成项目文件结构,包括一个与项目同名的子目录(配置文件包)和一个 manage.py 文件。

        # (venv) $ django-admin startproject my_cool_site
        # 这会在当前目录下创建如下结构:
        # my_cool_site/
        # ├── manage.py
        # └── my_cool_site/
        #     ├── __init__.py
        #     ├── asgi.py
        #     ├── settings.py
        #     ├── urls.py
        #     └── wsgi.py
        

        这种情况下,外部的 my_cool_site 是项目的根目录,内部的 my_cool_site 是项目的 Python 配置包。

      • 如果指定 [directory] 参数: Django 会使用你指定的目录作为项目的根目录。

        • 如果 [directory]. (点号,表示当前目录): 项目文件会直接在当前目录下创建。这在当你已经为项目创建了一个专用目录并 cd 进入后非常有用。
          # (venv) $ mkdir my_enterprise_project && cd my_enterprise_project
          # (venv) /path/to/my_enterprise_project $ django-admin startproject core_config .
          # 这会在 my_enterprise_project 目录下创建如下结构:
          # my_enterprise_project/
          # ├── manage.py
          # └── core_config/  <-- 项目配置包的名称由 projectname (core_config) 决定
          #     ├── __init__.py
          #     ├── asgi.py
          #     ├── settings.py
          #     ├── urls.py
          #     └── wsgi.py
          
          在这种方式下,my_enterprise_project 是项目根目录,而 core_config 是项目的配置包。这种方式更常见,因为它避免了项目根目录和配置包目录同名造成的轻微混淆。在企业项目中,通常推荐这种方式,将项目配置包命名为一个有意义的名称,如 configcore,而不是与项目仓库名完全相同。

示例:创建一个名为 alpha_commerce 的电商项目,配置文件包命名为 config

# (venv) $ mkdir alpha_commerce_project  # 1. 创建项目根目录
# (venv) $ cd alpha_commerce_project    # 2. 进入项目根目录
# (venv) /path/to/alpha_commerce_project $ django-admin startproject config . # 3. 创建项目,配置包为'config',目标目录为当前目录

执行后,alpha_commerce_project 目录结构如下:

alpha_commerce_project/
├── manage.py           # Django 项目的命令行工具入口
└── config/             # 项目的 Python 配置包
    ├── __init__.py     # 声明 config 是一个 Python 包
    ├── asgi.py         # ASGI 服务器的入口点
    ├── settings.py     # 项目的配置文件
    ├── urls.py         # 项目的根 URL 配置
    └── wsgi.py         # WSGI 服务器的入口点

代码解释:

  • mkdir alpha_commerce_project: 创建一个名为 alpha_commerce_project 的文件夹,作为我们整个 Django 项目的根容器。
  • cd alpha_commerce_project: 进入这个新创建的文件夹。之后的所有操作都将在这个文件夹内进行。
  • django-admin startproject config .: 这是核心命令。
    • django-admin: 调用 Django 的管理工具。
    • startproject: 指示 django-admin 创建一个新的项目。
    • config: 这是我们为项目配置包指定的名称。所有核心的项目级别设置(如数据库、安装的应用等)将位于这个名为 config 的 Python 包内。
    • .: 一个点号,表示我们希望 Django 在当前目录(即 alpha_commerce_project)下创建项目结构,而不是再创建一个与项目同名的额外子目录。这使得 alpha_commerce_project<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宅男很神经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值