浏览知识库目录

Python

Django是什么

从环境搭建、项目初始化开始,系统讲解 MTV 流程、路由与视图、模板渲染、ORM 与迁移、表单处理、Admin 后台等核心能力,配合可直接运行的示例,帮助你快速搭建第一个 Django 项目并建立后续深入学习的基础。

初识 Django

这篇笔记面向第一次接触 Django 的学习者,目标是在一篇文章里把“能跑起来 + 能理解核心思想 + 能继续学习”都覆盖到。你不需要一次就背会所有内容,但建议照着本篇先把最小可运行项目做出来,再按章节回看。


1. Django 是什么

Django 是一个 Python 全栈 Web 框架,擅长快速开发:你只需要定义数据模型(Model)和视图逻辑(View),框架会帮你把 URL 路由、模板渲染、表单处理、后台管理、数据库迁移等一系列重复工作串起来。

官方定位:

  • 高内聚但不强耦合的组件化设计
  • 内置 ORM、管理员后台、认证系统、中间件、表单体系
  • 强调“不要重复造轮子”(Don’t Repeat Yourself)

最重要的理解:

  • Django 不负责你编写全部 HTML/CSS/JS 的“页面细节”,它负责提供“服务端骨架”和“数据流组织能力”。

2. Django 的请求流程(MTV)

Django 常被称为 MTV 架构(和 MVC 非常接近):

  • Model(模型):数据库表与对象映射(ORM)
  • Template(模板):展示层 HTML
  • View(视图):处理请求、调度逻辑、返回响应

典型流程:

  1. 用户访问某个 URL
  2. Django 根据 urls.py 把请求交给对应 View
  3. View 读取/写入数据(Model)
  4. View 组织上下文数据交给模板(Template)
  5. 将渲染后的页面响应给用户

3. 环境准备

3.1 安装 Python 和 Django

先确认 Python 可用:

python --version

然后创建独立虚拟环境(推荐):

python -m venv .venv
.venv\Scripts\activate

安装 Django:

pip install django
# 查看版本
python -m django --version

说明:后续项目全部放在虚拟环境内,能避免依赖冲突。


4. 创建第一个项目

4.1 初始化项目与应用

# 在任意目录创建项目
django-admin startproject mysite
cd mysite

# 创建一个应用(app)
python manage.py startapp blog

4.2 项目结构(首次接触时需要记住)

mysite/
  manage.py
  mysite/
    __init__.py
    settings.py
    urls.py
    asgi.py
    wsgi.py
  blog/
    models.py
    views.py
    urls.py
    templates/
    static/
    migrations/

4.3 将 app 注册到 settings.py

打开 mysite/settings.py,在 INSTALLED_APPS 里加入:

INSTALLED_APPS = [
    # ...
    'blog',
]

5. 运行第一条页面

5.1 写一个视图

blog/views.py 里:

from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello Django!')

5.2 配置应用路由

创建 blog/urls.py

from django.urls import path
from . import views

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

再把它挂到项目路由 mysite/urls.py

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

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

5.3 启动服务

python manage.py runserver

浏览器访问 http://127.0.0.1:8000/,就会看到 Hello Django!


6. ORM 入门:模型与数据库

6.1 定义模型

blog/models.py

from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

6.2 生成并执行迁移

python manage.py makemigrations
python manage.py migrate

这两步会把 Python 类变成数据库表。

6.3 Django ORM 常用查询

# 获取全部
Post.objects.all()

# 过滤
Post.objects.filter(title__contains='Django')

# 单条
Post.objects.get(id=1)

# 创建
Post.objects.create(title='第一篇', content='内容')

7. 模板(Template)与静态资源(Static)

7.1 模板目录

你可以在应用下新建:

  • blog/templates/blog/index.html

示例模板:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>文章列表</title>
  </head>
  <body>
    <h1>文章列表</h1>
    <ul>
      {% for post in posts %}
        <li>{{ post.title }}</li>
      {% empty %}
        <li>暂无文章</li>
      {% endfor %}
    </ul>
  </body>
</html>

7.2 View 里渲染模板

from django.shortcuts import render
from .models import Post


def index(request):
    posts = Post.objects.all().order_by('-created_at')
    return render(request, 'blog/index.html', {'posts': posts})

7.3 静态文件(如 CSS/JS)

blog/static/blog/style.css 写样式,在模板中通过 {% load static %} 引入:

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

开发环境下通常可以直接访问静态文件;线上部署时需执行收集:

python manage.py collectstatic

8. 表单与数据库写入(核心起步能力)

8.1 用 ModelForm 快速建表单

from django import forms
from .models import Post


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

8.2 新建文章视图

from django.shortcuts import redirect, render
from .forms import PostForm


def post_create(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = PostForm()

    return render(request, 'blog/post_form.html', {'form': form})

8.3 路由添加

path('create/', views.post_create, name='post_create')

9. 管理后台(非常重要)

Django 内置 Admin,可快速管理数据库数据。

9.1 创建管理员

python manage.py createsuperuser

9.2 在后台显示模型

blog/admin.py

from django.contrib import admin
from .models import Post

admin.site.register(Post)

启动服务并访问 http://127.0.0.1:8000/admin/ 登录。


10. 404、500 与调试

开发阶段打开 settings.py 里的 DEBUG=True,能看到详细报错。

常见错误:

  • NoReverseMatch:URL 名称与 url 名称不匹配,先确认 path(..., name='xxx')
  • TemplateDoesNotExist:模板路径和配置不一致,检查 templates 的文件夹是否在应用中
  • OperationalError: no such table:没有执行 migrate
  • IntegrityError:数据库约束错误(如字段长度、空值规则)

11. 推荐的项目目录与配置习惯

  1. requirements.txt:记录依赖
  2. mysite/settings.py 抽出环境变量(数据库、密钥、调试开关)
  3. static/media/ 分离:
    • static:项目自带资源(CSS/JS)
    • media:用户上传的文件
  4. 每个 app 里保持“模型-视图-表单-模板-路由”的结构清晰
  5. 常用命令要形成肌肉记忆:
    • makemigrations
    • migrate
    • runserver
    • collectstatic
    • test

12. 一次完整的“极简博客”起步清单

建议你把下面清单独立实践一次:

  1. 创建项目与 app
  2. 建立 Post 模型并迁移
  3. 实现列表页
  4. 实现创建页(ModelForm)
  5. 通过模板循环显示
  6. 把模型注册到 Admin
  7. createsuperuser 登录后台手工补数据
  8. 在管理员页面和用户页面验证数据一致性

能顺利完成这 8 步,就已经具备了 Django 开发的基本闭环。


13. 下一步学习建议

  • Django Auth:登录、注册、权限
  • Class-Based Views(CBV)和 mixin
  • DRF(Django REST Framework):做 API
  • 缓存、分页、缓存清理
  • 缓存与性能(数据库索引、select_related/prefetch_related)
  • 部署:Nginx + Gunicorn/Uvicorn + PostgreSQL + Redis

14. 约定的一点提醒

以下是项目初期最容易踩坑但又最省事的实践:

  • 不要把所有逻辑都往一个 views.py 塞,逐步拆分
  • 表单验证别写在模板里,交给 Form/ModelForm
  • 每次改模型都执行 migrations 并迁移
  • 不要在生产环境开 DEBUG=True
  • 用版本控制保存每次变更(Git)

这份文档覆盖了 Django 的入门主线:环境 -> 路由 -> 视图 -> 模板 -> 模型 -> 表单 -> 管理后台 -> 部署方向。如果你愿意,我可以下一步按你当前机器环境,直接给出一份可运行的“从零初始化命令清单 + 真实文件树 + 一份可直接复制的最小项目代码”。