第一章:Django 基础入门


文档摘要

第一章:Django 基础入门 Django 是一个成熟、安全、可扩展的 Python Web 框架,以“开箱即用”和“约定优于配置”为核心理念,助力开发者高效构建高质量 Web 应用。本章系统梳理 Django 入门核心路径——从环境搭建、项目创建、应用组织,到视图开发、URL 路由、模板渲染,完整覆盖 Web 请求处理全链路。内容严格遵循 MTV(模型-模板-视图)架构逻辑,所有操作均基于 Django 4.2+ 稳定版本,适配 Python 3.8–3.12 环境,为后续数据库建模、用户认证、REST API 开发等进阶主题奠定坚实基础。 1.

第一章:Django 基础入门

Django 是一个成熟、安全、可扩展的 Python Web 框架,以“开箱即用”和“约定优于配置”为核心理念,助力开发者高效构建高质量 Web 应用。本章系统梳理 Django 入门核心路径——从环境搭建、项目创建、应用组织,到视图开发、URL 路由、模板渲染,完整覆盖 Web 请求处理全链路。内容严格遵循 MTV(模型-模板-视图)架构逻辑,所有操作均基于 Django 4.2+ 稳定版本,适配 Python 3.8–3.12 环境,为后续数据库建模、用户认证、REST API 开发等进阶主题奠定坚实基础。

1.1 Django 简介

Django 是一个开源、高水准的 Python Web 框架,由经验丰富的 Web 开发者于 2005 年发起并持续维护。它并非仅提供底层工具链,而是以工程化思维整合 Web 开发全栈能力,显著降低重复性工作,使团队能聚焦于业务逻辑与用户体验创新。

核心设计哲学

  • DRY(Don’t Repeat Yourself)原则:通过可复用的应用(App)、中间件、模板标签与管理命令,消除冗余代码。
  • 显式优于隐式:配置项清晰可见(如 settings.py),路由规则明确声明(urls.py),避免魔法行为干扰调试。
  • 安全性内建(Batteries Included):默认启用 CSRF 保护、XSS 转义、SQL 注入防护、密码哈希、HTTPS 重定向等关键安全机制。

Django 的核心特性

特性 说明 典型应用场景
ORM(对象关系映射) 抽象数据库操作,支持 PostgreSQL、MySQL、SQLite 等主流数据库,自动处理迁移、查询优化与连接池 用户数据管理、内容存储、订单处理
自动管理后台(Admin) 基于模型定义自动生成功能完备的管理界面,支持增删改查、搜索、过滤、导出 内容编辑、运营后台、数据审核
URL 路由系统 基于正则或路径转换器的声明式路由,支持命名空间、嵌套路由与反向解析 RESTful 接口设计、多语言站点、微前端集成
模板引擎 安全的 HTML 渲染引擎,支持继承、包含、过滤器、自定义标签与自动 HTML 转义 前后端分离前的动态页面、邮件模板、PDF 生成
表单处理框架 统一处理数据验证、渲染、绑定与错误提示,无缝对接模型字段 用户注册、内容提交、设置表单
用户认证系统 内置用户模型、权限系统、组管理、登录/登出视图与密码重置流程 SaaS 应用、企业门户、会员系统

MTV 架构解析

Django 采用 MTV(Model-Template-View) 架构,是对经典 MVC 模式的演进,更契合 Web 请求-响应生命周期:

  • 模型(Model):定义数据结构与业务规则,映射数据库表,封装数据持久化逻辑。
  • 模板(Template):纯展示层,负责 HTML 结构与动态内容渲染,不包含业务逻辑。
  • 视图(View):核心协调者,接收 HTTP 请求,调用模型获取或处理数据,选择模板并传入上下文,最终返回 HTTP 响应。

图 1.1 Django MTV 请求处理流程

该流程确保关注点分离:模型专注数据一致性,模板专注呈现体验,视图专注流程控制,大幅提升代码可维护性与团队协作效率。

1.2 环境搭建与安装 Django

构建稳定、可复现的开发环境是 Django 项目成功的前提。推荐采用虚拟环境隔离依赖,避免系统级包冲突。

1.2.1 安装 Python

Django 官方支持 Python 3.8 及以上版本。请从 python.org 下载并安装对应操作系统的最新稳定版。

安装完成后,在终端执行以下命令验证:

python --version # 或 python3 --version

预期输出示例:Python 3.11.8

注意:Windows 用户若遇到 python 命令不可用,请在安装时勾选 “Add Python to PATH” 选项;macOS 用户推荐使用 pyenv 管理多版本 Python。

1.2.2 验证 pip

pip 是 Python 官方包管理器,随 Python 3.4+ 自动安装。执行以下命令确认:

pip --version # 或 pip3 --version

预期输出示例:pip 23.3.1 from /path/to/site-packages/pip (python 3.11)

如未安装,请参考 pip 官方安装指南

1.2.3 创建并激活虚拟环境

使用 Python 内置 venv 模块创建隔离环境(推荐命名为 venv):

# 创建虚拟环境 python -m venv venv # Linux/macOS 激活 source venv/bin/activate # Windows 激活(PowerShell) venv\Scripts\Activate.ps1 # 或 Windows 命令提示符 venv\Scripts\activate.bat

激活成功后,终端提示符前将显示 (venv) 标识。

重要:所有后续 pip 安装操作必须在激活状态下执行,否则包将安装至系统 Python 环境。

1.2.4 安装 Django

在激活的虚拟环境中执行:

pip install Django

验证安装:

django-admin --version # 输出示例:4.2.11

最佳实践:安装完成后,运行 pip freeze > requirements.txt 生成依赖清单,便于团队协作与生产部署。

1.3 创建你的第一个 Django 项目

Django 项目是应用(App)的容器,提供全局配置与共享资源。项目结构遵循清晰的分层约定。

1.3.1 初始化项目

在目标工作目录执行:

django-admin startproject myproject

该命令生成以下项目根目录结构:

myproject/ manage.py myproject/ __init__.py asgi.py settings.py urls.py wsgi.py

1.3.2 核心文件职责说明

文件/目录 职责 关键配置点
manage.py 项目管理命令行入口 所有 python manage.py xxx 命令由此驱动
myproject/settings.py 全局配置中心 INSTALLED_APPS, DATABASES, SECRET_KEY, ALLOWED_HOSTS, 静态文件路径等
myproject/urls.py 根 URL 路由表 定义项目级 URL 分发规则,通常包含 admin/ 和各应用路由入口
myproject/wsgi.py WSGI 服务器部署入口 用于 Gunicorn、uWSGI 等生产服务器
myproject/asgi.py ASGI 异步服务器部署入口 支持 WebSockets、长轮询等异步场景

图 1.2 Django 项目目录结构

1.3.3 启动开发服务器

进入 myproject 目录,执行:

python manage.py runserver

终端将输出类似信息:

Performing system checks... System check identified no issues (0 silenced). June 18, 2024 - 14:22:33 Django version 4.2.11, using settings 'myproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

访问 http://127.0.0.1:8000/,将看到 Django 默认欢迎页:“It worked! Congratulations on your first Django-powered page.”

提示:开发服务器具备热重载能力,修改 Python 或模板文件后自动重启,无需手动干预。

1.4 创建你的第一个 Django 应用

Django 应用是功能模块的独立单元,遵循单一职责原则。一个项目可包含多个应用(如 blog, users, payments),每个应用可被复用于不同项目。

1.4.1 创建应用

myproject 根目录下执行:

python manage.py startapp myapp

生成应用目录结构:

myapp/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py

1.4.2 应用文件职责说明

文件 职责 使用时机
models.py 定义数据模型(Python 类),映射数据库表结构 需要持久化数据时
views.py 编写视图函数或类,处理请求逻辑并返回响应 需要响应 HTTP 请求时
urls.py (需手动创建) 定义应用内部 URL 路由 应用需暴露多个端点时
admin.py 注册模型至 Django 管理后台 需要后台管理数据时
apps.py 应用配置类,可自定义应用行为 高级定制场景(如信号注册)
migrations/ 存放数据库迁移脚本,记录模型变更历史 执行 makemigrations 后生成

图 1.3 Django 应用目录结构

1.4.3 注册应用

Django 不会自动发现新应用,必须在 myproject/settings.pyINSTALLED_APPS 中显式注册:

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', # ← 新增此行 ]

关键点:应用注册顺序影响信号、模板加载与中间件执行顺序,通常将自定义应用置于内置应用之后。

1.5 编写你的第一个视图函数

视图是 Django 的“控制器”,负责接收请求、处理业务、返回响应。本节实现最简 HTTP 响应。

1.5.1 定义基础视图

编辑 myapp/views.py

from django.http import HttpResponse def hello_django(request): return HttpResponse("<h1>Hello, Django!</h1>")

该函数接收 request 对象(封装客户端请求信息),返回 HttpResponse(包含 HTML 响应体)。

1.5.2 配置应用级 URL 路由

myapp/ 目录下创建 urls.py

from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello_django, name='hello'), ]
  • path():声明 URL 模式,'hello/' 表示匹配 /myapp/hello/ 路径。
  • name='hello':为路由命名,支持模板中 {% url 'hello' %} 反向解析,提升可维护性。

1.5.3 配置项目级 URL 路由

修改 myproject/urls.py,将 myapp 路由纳入项目总入口:

from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('myapp/', include('myapp.urls')), # ← 新增此行 ]

include()/myapp/ 开头的所有请求转发至 myapp.urls 处理。

1.5.4 访问视图

重启开发服务器(Ctrl+C 停止后重新运行 python manage.py runserver),访问:

http://127.0.0.1:8000/myapp/hello/

页面将显示 <h1>Hello, Django!</h1>

1.5.5 URL 路由进阶:动态路径参数

Django 路由支持从 URL 中提取变量并传递给视图。例如,匹配用户 ID:

# myapp/urls.py from django.urls import path from . import views urlpatterns = [ path('hello/', views.hello_django, name='hello'), path('user/<int:user_id>/', views.user_detail, name='user_detail'), ]
  • <int:user_id>int 是路径转换器,确保 user_id 为整数;user_id 是参数名,将作为关键字参数传入视图。
  • 视图函数需接收该参数:def user_detail(request, user_id):

其他常用转换器str(字符串)、slug(URL 友好字符串)、uuid(UUID 格式)、path(含 / 的路径)。

1.6 使用模板(Templates)

硬编码 HTML 字符串难以维护且无法复用。Django 模板引擎将逻辑与展示分离,支持继承、变量、标签与过滤器。

1.6.1 创建模板目录结构

按 Django 约定,在 myapp/ 下创建模板目录:

myapp/ ... templates/ myapp/ hello.html hello_data.html ...

约定说明templates/myapp/ 结构避免多应用间模板名冲突,render() 函数中路径为 'myapp/hello.html'

1.6.2 创建并渲染基础模板

创建 myapp/templates/myapp/hello.html

<!DOCTYPE html> <html> <head> <title>Hello Django</title> </head> <body> <h1>Hello, Django Templates!</h1> <p>Welcome to Django template world.</p> </body> </html>

修改 myapp/views.py

from django.shortcuts import render def hello_template(request): return render(request, 'myapp/hello.html')
  • render():封装 HttpResponse 与模板渲染,自动传入 request 上下文(如 user, csrf_token)。

myapp/urls.py 中添加路由:

path('template/', views.hello_template, name='template'),

访问 http://127.0.0.1:8000/myapp/template/ 查看效果。

1.6.3 传递动态数据至模板

模板变量通过 {{ variable }} 语法渲染。修改视图传递上下文:

# myapp/views.py def hello_template_with_data(request): context = { 'name': 'Django', 'message': 'Hello from View!', 'timestamp': '2024-06-18', } return render(request, 'myapp/hello_data.html', context)

创建 myapp/templates/myapp/hello_data.html

<!DOCTYPE html> <html> <head> <title>Hello Django with Data</title> </head> <body> <h1>Hello, {{ name }}!</h1> <p>{{ message }}</p> <p>Generated on: {{ timestamp }}</p> </body> </html>

myapp/urls.py 中添加路由:

path('template_data/', views.hello_template_with_data, name='template_data'),

访问 http://127.0.0.1:8000/myapp/template_data/,页面将动态显示传入的数据。

安全机制:Django 模板默认对变量内容进行 HTML 转义,防止 XSS 攻击。如需渲染原始 HTML,使用 {{ variable|safe }} 过滤器(需确保内容可信)。

1.7 总结与进阶路径

本章系统构建了 Django 开发的完整入门路径,覆盖从环境初始化到动态页面渲染的全部核心环节。所有实践均基于 Django 官方最佳实践,强调可维护性、安全性与工程化思维。

核心知识图谱

图 1.4 Django 基础知识体系

下一步学习重点

  • 模型(Models)与数据库:掌握 models.Model 定义、字段类型、关系建模(ForeignKey、ManyToManyField)、迁移命令(makemigrations, migrate)及 ORM 查询(filter(), get(), order_by())。
  • 管理后台(Admin):学习 admin.site.register()ModelAdmin 定制、列表显示、搜索过滤与批量操作。
  • 表单(Forms):理解 forms.Formforms.ModelForm,实现数据验证、HTML 渲染与错误提示。
  • 静态文件管理:配置 STATIC_URLSTATIC_ROOT,使用 {% static %} 模板标签加载 CSS/JS/图片。
  • 用户认证系统:集成登录、登出、注册、密码重置及权限控制(@login_required, user_passes_test)。

完成本章学习后,开发者已具备独立搭建 Django 项目骨架、响应 HTTP 请求、渲染动态页面的能力。后续章节将围绕数据层、交互层与安全层深度展开,助你构建生产级 Web 应用。


发布者: 作者: 转发
评论区 (0)
U