Python Django 框架:全栈 Web 开发

FreeGuideOnline 最新 2026-06-16

Django 框架:全栈 Web 开发入门

Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。它遵循“电池已包含”的理念,提供了开发安全且可维护的网站所需的几乎所有工具。从内容管理系统到社交网络和科学计算平台,Django 都能胜任。

为什么选择 Django?

  • 极速开发:通过模型-模板-视图(MTV)架构和自动化工具,几行代码即可生成管理后台。
  • 安全性:默认防范 SQL 注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等常见攻击。
  • 可扩展性:清晰的应用结构使得项目很容易拆分为独立模块,方便团队协作。
  • 丰富的生态:拥有庞大的社区和第三方包,如 Django REST framework、Celery、django-allauth 等。

Django 核心架构:MTV 模式

Django 采用与经典 MVC 类似的 MTV(Model-Template-View)模式:

  • 模型(Model) :数据层,处理数据库结构和数据关系,以 Python 类定义。
  • 模板(Template) :表现层,使用 Django 模板语言动态生成 HTML。
  • 视图(View) :业务逻辑层,接收请求、处理数据并返回响应,类似控制器。

        用户请求 → URL 配置 → 视图(View)
                                  |
                  ┌───────────────┴───────────────┐
                  |                               |
              模型(Model)                    模板(Template)
                  |
              数据库

环境准备与安装

确保已安装 Python 3.8 或更高版本。使用虚拟环境隔离项目依赖:

# 创建虚拟环境
python -m venv myenv

# 激活虚拟环境 (Windows)
myenv\Scripts\activate
# 激活虚拟环境 (macOS/Linux)
source myenv/bin/activate

# 安装 Django
pip install django

检查安装:

python -m django --version

创建第一个 Django 项目

django-admin startproject myproject
cd myproject

生成的项目结构:

myproject/
    manage.py           # 命令行管理工具
    myproject/
        __init__.py
        settings.py     # 全局配置文件
        urls.py         # 根 URL 声明
        asgi.py         # ASGI 入口
        wsgi.py         # WSGI 入口

启动开发服务器测试:

python manage.py runserver

访问 http://127.0.0.1:8000/,看到火箭页面表示项目搭建成功。

创建第一个应用

Django 项目由多个“应用”组成,每个应用完成特定功能。

python manage.py startapp blog

应用目录结构:

blog/
    migrations/    # 数据库迁移文件
    admin.py       # 管理后台注册
    apps.py        # 应用配置
    models.py      # 模型定义
    views.py       # 视图函数
    tests.py       # 测试代码

将应用注册到项目 settings.pyINSTALLED_APPS 中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'blog',               # 添加这一行
]

定义数据模型(Model)

blog/models.py 中创建一个简单的文章模型:

from django.db import models
from django.utils import timezone

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

然后生成并应用数据库迁移:

python manage.py makemigrations blog
python manage.py migrate

强大的 Django 管理后台

Django 自动为你生成一套功能齐全的管理界面。在 blog/admin.py 中注册模型:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

创建超级用户:

python manage.py createsuperuser

启动服务器并访问 http://127.0.0.1:8000/admin/,即可用创建的用户名密码登录,在后台添加、编辑、删除文章,所有操作无需手写一行前端代码。

编写视图(View)与 URL 配置

视图是 Django 处理请求的核心。打开 blog/views.py,编写文章列表视图:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.filter(published_date__isnull=False).order_by('-published_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

然后创建 blog/urls.py 文件,定义应用内部的 URL 模式:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
]

最后,在项目的 myproject/urls.py 中包含博客应用的 URL:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

创建模板(Template)

blog/ 目录下创建 templates/blog/ 文件夹,新建 post_list.html

<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
</head>
<body>
    <h1>博客文章列表</h1>
    {% for post in posts %}
        <div>
            <h2>{{ post.title }}</h2>
            <p>发布于: {{ post.published_date }}</p>
            <p>{{ post.content|truncatewords:50 }}</p>
        </div>
    {% empty %}
        <p>暂无文章。</p>
    {% endfor %}
</body>
</html>

刷新页面 http://127.0.0.1:8000/,就能看到后台发布的文章列表。模板中使用了 Django 模板语言:{% %} 用于标签(如循环、判断),{{ }} 用于输出变量。

处理用户输入:表单(Form)

Django 的表单系统能自动生成 HTML 并验证数据。创建 blog/forms.py

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('title', 'content')

views.py 中添加新建文章的视图:

from django.shortcuts import redirect
from .forms import PostForm

def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.publish()
            return redirect('post_list')
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

对应的模板 templates/blog/post_edit.html

<h1>新建文章</h1>
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">保存</button>
</form>

别忘了在 blog/urls.py 中添加路由:

path('post/new/', views.post_new, name='post_new'),

{% csrf_token %} 是 Django 提供的跨站请求伪造保护,所有 POST 表单都必须包含。

静态文件与美化

Django 通过 STATIC_URLdjango.contrib.staticfiles 管理静态资源(CSS、JS、图片)。

blog/ 下创建 static/blog/style.css

h1 { color: #2c3e50; font-family: Arial, sans-serif; }
div { margin-bottom: 20px; padding: 10px; border-bottom: 1px solid #ccc; }

在模板顶部加载静态文件:

{% load static %}
<link rel="stylesheet" href="{% static 'blog/style.css' %}">

开发环境中静态文件会自动服务,生产环境需要执行 collectstatic 命令。

用户认证与权限

Django 自带的认证系统可轻松集成。若要区分已发布和草稿,可以在视图中限制访问:

from django.contrib.auth.decorators import login_required

@login_required
def post_draft_list(request):
    posts = Post.objects.filter(published_date__isnull=True).order_by('created_date')
    return render(request, 'blog/post_draft_list.html', {'posts': posts})

未登录用户访问该视图将自动重定向到登录页。

部署建议

项目开发完成后,推荐以下部署方式:

  1. 设置生产配置:修改 settings.pyDEBUG=False,配置 ALLOWED_HOSTS,生成新的 SECRET_KEY
  2. 静态文件收集:执行 python manage.py collectstatic,将静态文件集中到 STATIC_ROOT
  3. 使用 WSGI/ASGI 服务器:如 Gunicorn 或 uWSGI 运行 Django。
  4. 反向代理:Nginx 或 Apache 处理静态文件并将请求转发给应用服务器。
  5. 数据库:将 SQLite 更换为 PostgreSQL、MySQL 等生产级数据库。

常见部署平台包括 Heroku、AWS Elastic Beanstalk、DigitalOcean 等,许多平台支持一键部署 Django。

扩展学习路径

  • 类视图(Class-Based Views) :用 ListViewDetailView 等减少重复代码。
  • Django REST framework:构建强大的 Web API。
  • 测试:使用 Django 的测试框架编写单元测试和集成测试。
  • 异步支持:Django 3.1+ 支持异步视图和中间件。
  • 缓存与性能优化:利用缓存框架、数据库索引、查询优化。

Django 的世界非常广阔,但你已掌握了全栈开发的核心循环:定义模型、创建视图、编写模板、配置 URL 和管理后台。接下来只需通过实际项目不断深入,就能成为一名高效的 Django 开发者。