很多新手学完语法后依然无从下手。Django 开发不是随机写代码,而是遵循一套严谨的“数据驱动 → 逻辑处理 → 界面展示”流水线。请严格按照以下 6 步顺序进行每一个新功能的开发:
思考业务需要什么数据表?字段是什么?关系如何?
💡 数据是地基,视图和模板都依赖于数据结构。执行 makemigrations + migrate,将 Python 类转换为真实的数据库表。
注册模型,通过 Admin 后台手动录入几条测试数据。
💡 在没有前端页面时,先确保数据能正常存取。查询数据、处理表单、组装上下文字典 (Context)。
💡 View 是连接器,建议先用 HttpResponse 验证逻辑。为刚才写的 View 分配一个 URL 地址,并在主 urls 中 include。
💡 先写 app 级 urls,再在项目级引入,保持解耦。接收 Context 数据,使用 DTL 语法循环、判断、展示。
💡 当数据和逻辑都通了,再美化界面效率最高。Model → Migration → Admin → View → URL → Template 的顺序反向排查。
目标:理解 Django 的 MTV 架构,成功跑通第一个页面。
# 安装 Django
pip install django
# 创建项目
django-admin startproject mysite
cd mysite
# 创建应用
python manage.py startapp blog
blog/views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("你好,这是你的第一个 Django 页面!")
blog/urls.py (新建):
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
mysite/urls.py (主路由):
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
目标:渲染 HTML 页面,引入 CSS/JS。
在 settings.py 的 TEMPLATES 中配置 DIRS,然后创建 templates/home.html:
<!DOCTYPE html>
<html>
<head>
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>{{ title }}</h1>
{% for article in articles %}
<p>{{ article }}</p>
{% endfor %}
</body>
</html>
from django.shortcuts import render
def index(request):
context = {
'title': '欢迎来到我的博客',
'articles': ['Django入门', 'Python基础']
}
return render(request, 'home.html', context)
目标:实现数据持久化,使用 Admin 后台。
# blog/models.py
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
终端执行:python manage.py makemigrations && python manage.py migrate
# blog/admin.py
admin.site.register(Article)
# blog/views.py
def index(request):
articles = Article.objects.all()
return render(request, 'home.html', {'articles': articles})
目标:接收用户输入,实现 CRUD。
# 模板中必须包含 {% csrf_token %}
<form method="POST">
{% csrf_token %}
<input name="title">
<button>提交</button>
</form>
# views.py
def add_article(request):
if request.method == 'POST':
Article.objects.create(
title=request.POST.get('title'),
content=request.POST.get('content')
)
return redirect('/')
使用 Django REST Framework 将数据序列化为 JSON,支持前后端分离。
select_related / prefetch_related 解决 N+1 查询。标准组合:Nginx (反向代理/静态文件) + Gunicorn (WSGI服务器) + Django。
| 阶段 | 核心关键词 | 重点掌握内容 |
|---|---|---|
| 入门 | MTV, URL | 项目结构, 路由分发 |
| 基础 | Template, Static | DTL语法, 模板继承 |
| 中级 | Model, ORM | 数据库迁移, Admin后台 |
| 进阶 | Form, Auth | 表单验证, 用户认证 |
| 高级 | DRF, Cache | REST API, Redis, Nginx部署 |