65·模块十三:Web开发基础进阶

全栈框架入门:Django 简介与项目创建

djangofull-stackweb-framework

第65课 - 全栈框架入门:Django 简介与项目创建

学习目标

完成本课学习后,你将能够:

  1. 理解 Django 框架的定位、特点及其与 Flask 的区别。
  2. 掌握创建 Django 项目和应用的基本流程与命令。
  3. 熟悉 Django 项目的标准目录结构及各文件/目录的职责。
  4. 编写并运行你的第一个 Django 视图(View)和 URL 配置。
  5. 了解 Django 开发服务器(runserver)的启动与使用。

核心概念

1. Django 是什么?

Django 是一个用 Python 编写的高级全栈 Web 框架。如果说 Flask 是一个"轻量级工具箱",那么 Django 就是一个"功能完备的工厂"。它鼓励快速开发和简洁、实用的设计。

"全栈" 意味着 Django 提供了一站式解决方案,内置了 Web 开发中常用的功能:

  • ORM (对象关系映射):用 Python 代码操作数据库,无需直接写 SQL。
  • 管理后台:自动生成一个强大的管理界面,用于管理网站内容。
  • 表单处理:方便地创建和验证 HTML 表单。
  • 用户认证:内置用户登录、注册、权限管理等系统。
  • URL 路由:将 URL 映射到具体的处理函数。
  • 模板引擎:将数据动态生成 HTML 页面。

2. Django vs Flask

你可以把它们想象成两种工具:

  • Flask:像一个高级智能手机的"基础设置"。它给你核心功能,但更多功能(如用户系统、数据库)需要你通过"安装App(扩展)"来添加。
  • Django:像一台"出厂即带全家桶的旗舰机"。它默认集成了大部分你开发复杂网站所需的工具,遵循"电池已包含"的哲学。

选择建议:

  • 小型项目、API 服务、需要高度定制化 -> 考虑 Flask。
  • 内容驱动型网站(如博客、新闻站)、管理后台、电商、需要快速开发的标准功能 -> 首选 Django。

3. Django 项目架构:MVT 模式

Django 采用 MVT (Model-View-Template) 架构,这与传统的 MVC (Model-View-Controller) 稍有不同,但本质相似。

  • Model (模型):负责数据结构和数据库交互。定义数据是什么样的。
  • View (视图):负责业务逻辑。处理请求,从 Model 获取数据,并选择合适的 Template 进行渲染。
  • Template (模板):负责页面展示。是带有特殊语法的 HTML 文件,用于展示 View 传来的数据。
  • (隐含的 Controller):Django 自身的 URL 调度器和框架核心部分承担了"控制器"的角色,负责接收请求并分派给正确的 View。

工作流程:用户请求 URL -> Django URL 调度器找到对应的 View 函数 -> View 函数处理业务(可能查询数据库 Model)-> View 将数据传递给 Template -> Template 渲染生成 HTML -> 返回给用户浏览器。

代码示例

步骤 1:安装 Django

首先,确保你的 Python 环境已激活(推荐使用虚拟环境)。

pip install django

安装完成后,可以通过 django-admin --version 查看版本。

步骤 2:创建项目

使用 django-admin 命令来创建一个新的 Django 项目。项目是网站的"整体配置"。

# 进入你想存放项目的目录
cd ~/projects

# 创建一个名为 `mysite` 的项目
django-admin startproject mysite

执行后,Django 会生成如下结构:

mysite/
    manage.py         # 项目的管理脚本(用于运行命令)
    mysite/           # 项目的 Python 包(核心配置)
        __init__.py   # 标识这是一个 Python 包
        settings.py   # 项目的所有配置(数据库、应用、中间件等)
        urls.py       # 项目的根 URL 配置
        asgi.py       # ASGI 兼容的 Web 服务器入口(可忽略)
        wsgi.py       # WSGI 兼容的 Web 服务器入口(可忽略)

步骤 3:创建应用

一个项目可以包含多个应用(App),每个应用负责一块独立的功能(如博客、用户认证、评论系统)。

# 进入项目目录
cd mysite

# 创建一个名为 `blog` 的应用
python manage.py startapp blog

现在项目结构变为:

mysite/
    manage.py
    mysite/ (项目配置)
    blog/   (新创建的应用)
        __init__.py
        admin.py      # 注册模型到管理后台
        apps.py       # 应用的配置
        migrations/   # 数据库迁移文件
            __init__.py
        models.py     # 定义数据模型
        tests.py      # 测试文件
        views.py      # 编写视图函数

步骤 4:编写第一个视图

blog/views.py 文件中写入以下代码:

from django.http import HttpResponse

def hello_world(request):
    """
    一个简单的视图函数。
    它接收一个 HttpRequest 对象,返回一个 HttpResponse 对象。
    """
    return HttpResponse("<h1>Hello, Django World!</h1><p>这是我的第一个Django页面。</p>")

request 对象包含了所有关于本次 HTTP 请求的信息(如 URL、参数、头信息等)。

步骤 5:配置 URL 路由

将 URL 与视图函数关联起来。

首先,在 blog/ 目录下创建一个新文件 urls.py

# blog/urls.py
from django.urls import path
from . import views # 从当前目录导入 views 模块

urlpatterns = [
    # 当访问路径为空字符串时,调用 views.hello_world 函数
    path('', views.hello_world, name='hello_world'),
]

然后,将这个应用的 URL 配置包含到项目的总配置中。编辑 mysite/urls.py

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include # 新增导入 include

urlpatterns = [
    path('admin/', admin.site.urls), # Django 自带管理后台
    path('blog/', include('blog.urls')), # 将所有以 `blog/` 开头的 URL 交给 blog 应用的 urls.py 处理
]

这样,当用户访问 http://localhost:8000/blog/ 时,就会被导向到 blog 应用的 hello_world 视图。

步骤 6:启动开发服务器

现在,启动 Django 内置的开发服务器来查看结果。

python manage.py runserver

你将看到类似输出:

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

在浏览器中打开 http://127.0.0.1:8000/blog/,你将看到 "Hello, Django World!" 的页面。🎉

实践练习

练习 1:基础搭建

  1. 创建一个名为 portfolio 的新 Django 项目。
  2. 在其中创建一个名为 homepage 的应用。
  3. homepage 的视图中创建一个函数 about_me,返回包含你自我介绍的简单 HTML。
  4. 配置 URL,使得访问 http://127.0.0.1:8000/about/ 时显示该页面。
  5. 启动服务器并验证。

预期输出:访问 /about/ 路径时,浏览器显示你的自我介绍内容。

练习 2:多视图路由

在练习 1 的基础上:

  1. homepage 视图中增加一个新函数 my_projects,返回一个包含项目列表的 HTML(可以用无序列表 <ul><li>...</li></ul>)。
  2. 配置新的 URL 路由,使得 /projects/ 路径指向这个新视图。
  3. 确保根路径 / 也能正常工作(例如,重定向到 /about/ 或显示欢迎页)。

预期输出

  • 访问 /about/:显示自我介绍。
  • 访问 /projects/:显示项目列表。
  • 访问 /:显示欢迎信息或跳转。

练习 3:探索项目结构(探究型)

  1. 尝试修改 mysite/settings.py 中的 TIME_ZONE 配置项,将其改为 'Asia/Shanghai'
  2. 重启开发服务器(在终端按 Ctrl+C 停止,然后重新运行 python manage.py runserver)。
  3. 观察终端输出的时间日志格式是否有变化。
  4. 思考:如果我想让网站在后台显示"网站正在维护",我应该如何快速实现?(提示:修改 settings.py 中的一个特定配置)。

预期输出:服务器日志的时间格式符合上海时区,并能回答实现"维护模式"的思路。

常见错误

  1. 应用名冲突或拼写错误:确保创建的应用名不会与 Python 内置模块或第三方库冲突(如不要命名为 test, django)。在 include('blog.urls')INSTALLED_APPS (下一课会详述) 中引用应用时,确保字符串拼写完全一致。
  2. 忘记在 settings.py 中注册应用:本课示例中,因为我们只是编写视图,还没有创建模型,所以没有演示。但这是一个关键步骤:创建模型后,必须在 INSTALLED_APPS 列表中添加你的应用名(如 'blog.apps.BlogConfig''blog'),否则 Django 无法识别该应用提供的模型。
  3. URL 模式中的斜杠 /path('blog/', ...)path('blog', ...) 是不同的。前者只匹配 /blog/,后者匹配 /blog 但不匹配 /blog/。通常,我们使用带斜杠的版本,并可以设置 APPEND_SLASH = True (默认) 来自动补全末尾斜杠。
  4. 视图函数缺少 request 参数:所有视图函数必须接收 request 作为第一个参数,即使函数内部不使用它。
  5. 导入错误:检查视图和 URL 文件中的导入语句是否正确。常见错误如 from . import views 写成了 import views

小结

  • Django 定位:一个"电池已包含"的全栈 Web 框架,适合快速开发数据驱动、功能丰富的网站。
  • 项目与应用项目(Project) 是整个网站的配置,应用(App) 是网站中独立的功能模块。一个项目可以包含多个应用。
  • 核心命令
    • django-admin startproject <项目名>:创建项目。
    • python manage.py startapp <应用名>:创建应用。
    • python manage.py runserver:启动开发服务器。
  • 基本流程
    1. 创建项目和应用。
    2. 在应用的 views.py 中编写处理请求的视图函数。
    3. 在应用的 urls.py 中配置 URL 与视图的映射关系。
    4. 将应用的 URL 配置包含到项目的 urls.py 中。
    5. 运行服务器,访问测试。
  • 项目结构:理解 manage.py(管理脚本)、settings.py(总配置)、urls.py(路由入口)、views.py(业务逻辑)等关键文件的用途。

你已经迈出了 Django 开发的第一步!下一课,我们将深入 Django 最核心的部分之一——模型(Models) 和强大的 ORM,学习如何用 Python 代码来定义和操作数据库。

练习编辑器

python
Loading...

继续学习

完成本课后,建议继续学习下一课「Django 模型(Models)与 ORM」 以巩固所学知识。