Python
Django是什么
从环境搭建、项目初始化开始,系统讲解 MTV 流程、路由与视图、模板渲染、ORM 与迁移、表单处理、Admin 后台等核心能力,配合可直接运行的示例,帮助你快速搭建第一个 Django 项目并建立后续深入学习的基础。
发布于 2026年7月22日
初识 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(视图):处理请求、调度逻辑、返回响应
典型流程:
- 用户访问某个 URL
- Django 根据
urls.py把请求交给对应View - View 读取/写入数据(Model)
- View 组织上下文数据交给模板(Template)
- 将渲染后的页面响应给用户
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:没有执行migrateIntegrityError:数据库约束错误(如字段长度、空值规则)
11. 推荐的项目目录与配置习惯
requirements.txt:记录依赖mysite/settings.py抽出环境变量(数据库、密钥、调试开关)static/与media/分离:- static:项目自带资源(CSS/JS)
- media:用户上传的文件
- 每个 app 里保持“模型-视图-表单-模板-路由”的结构清晰
- 常用命令要形成肌肉记忆:
makemigrationsmigraterunservercollectstatictest
12. 一次完整的“极简博客”起步清单
建议你把下面清单独立实践一次:
- 创建项目与 app
- 建立
Post模型并迁移 - 实现列表页
- 实现创建页(ModelForm)
- 通过模板循环显示
- 把模型注册到 Admin
- 用
createsuperuser登录后台手工补数据 - 在管理员页面和用户页面验证数据一致性
能顺利完成这 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 的入门主线:环境 -> 路由 -> 视图 -> 模板 -> 模型 -> 表单 -> 管理后台 -> 部署方向。如果你愿意,我可以下一步按你当前机器环境,直接给出一份可运行的“从零初始化命令清单 + 真实文件树 + 一份可直接复制的最小项目代码”。