第一部分:Django 核心概念
在开始编码前,理解 Django 的核心思想至关重要,Django 遵循 MVT (Model-View-Template) 架构模式。

-
Model (模型):
- 作用:定义你的数据结构,它就像是数据库的“蓝图”,描述了你的网站有哪些数据(文章、用户、评论),以及这些数据有哪些字段(标题、内容、发布日期)。
- 对应关系:
Model最终会映射到数据库中的表。
-
View (视图):
- 作用:业务逻辑的核心,它接收来自用户的请求(比如用户访问
/articles/1/),处理数据(从数据库读取文章),然后决定将什么数据返回给用户。 - 对应关系:
View是一个 Python 函数或类,它连接Model和Template。
- 作用:业务逻辑的核心,它接收来自用户的请求(比如用户访问
-
Template (模板):
- 作用:负责展示数据,它是一个包含 HTML 代码和特殊 Django 模板语言(DTL)的文件,视图将数据传递给模板,模板将这些数据渲染成最终的 HTML 页面发送给用户的浏览器。
- 对应关系:
Template决定了用户最终看到的样子。
数据流程:用户请求 URL -> URLs (路由) -> View (处理逻辑,从 Model 获取数据) -> Template (渲染数据,生成 HTML) -> 返回给用户。

第二部分:开发一个简单的博客网站
我们将开发一个简单的博客,包含以下功能:
- 首页:显示所有文章列表。
- 文章详情页:显示单篇文章的完整内容。
- 后台管理:一个自动生成的管理界面,用于发布和管理文章。
步骤 1:环境准备
-
安装 Python:确保你的系统已经安装了 Python (推荐 3.8+ 版本)。
-
创建虚拟环境:这是一个好习惯,可以隔离不同项目的依赖。
# 创建一个名为 myblog 的虚拟环境 python -m venv myblog # 激活虚拟环境 # Windows: myblog\Scripts\activate # macOS/Linux: source myblog/bin/activate
-
安装 Django:在激活的虚拟环境中,使用 pip 安装 Django。
pip install Django
步骤 2:创建 Django 项目和应用
-
创建项目:使用
django-admin命令创建一个名为mysite的项目。django-admin startproject mysite
这会创建一个
mysite目录,包含以下文件:manage.py: 一个命令行工具,用于与你的项目进行交互。mysite/: 项目的主包。__init__.py: 一个空文件,告诉 Python 这是一个包。settings.py: 项目的所有设置(数据库、应用、中间件等)。urls.py: 项目的 URL 声明(URL 路由表)。asgi.py和wsgi.py: 用于部署的文件。
-
创建应用:一个项目可以包含多个应用,每个应用负责一项具体功能,我们创建一个名为
blog的应用来处理博客功能。cd mysite python manage.py startapp blog
这会创建一个
blog目录,包含模型、视图、模板等文件。 -
注册应用:必须告诉 Django 这个
blog应用是项目的一部分,打开mysite/settings.py文件,在INSTALLED_APPS列表中添加'blog'。# mysite/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', # 添加这一行 ]
步骤 3:定义模型 (Model)
我们定义文章的数据结构,编辑 blog/models.py 文件:
# blog/models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):= models.CharField(max_length=200, verbose_name="标题")
content = models.TextField(verbose_name="内容")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
class Meta:
verbose_name = "文章"
verbose_name_plural = "文章"
ordering = ['-created_at'] # 按创建时间降序排列
def __str__(self):
return self.title
CharField和TextField是不同的字段类型。created_at = models.DateTimeField(auto_now_add=True)表示创建文章时自动记录时间。__str__方法定义了对象的字符串表示形式,这在后台管理中很有用。
步骤 4:创建和迁移数据库
Django 的模型需要被转换成实际的数据库表。
- 生成迁移文件:这个命令会检查你的模型变化并生成一个迁移脚本。
python manage.py makemigrations
- 应用迁移:这个命令会执行迁移脚本,在数据库中创建相应的表。
python manage.py migrate
默认情况下,Django 使用 SQLite 数据库,它会创建一个
db.sqlite3文件。
步骤 5:配置 URL 和视图 (View & URL)
-
配置项目 URL:打开
mysite/urls.py,将所有请求转发给blog应用的urls.py。# mysite/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), # 添加这一行,将根路径的请求交给 blog.urls 处理 ] -
创建应用 URL:在
blog目录下创建一个urls.py文件。# blog/urls.py from django.urls import path from . import views urlpatterns = [ # 首页,显示所有文章列表 path('', views.post_list, name='post_list'), # 文章详情页,/post/1/ path('post/<int:pk>/', views.post_detail, name='post_detail'), ]path('', views.post_list, name='post_list'):当访问根路径时,调用blog.views.post_list函数。<int:pk>是一个 URL 捕获器,它会捕获一个整数作为pk(primary key),并将其传递给视图函数。
-
编写视图函数:编辑
blog/views.py文件。# blog/views.py from django.shortcuts import render, get_object_or_404 from .models import Post def post_list(request): # 获取所有已发布的文章,按创建日期降序排列 posts = Post.objects.all() # 渲染模板,并传递 posts 变量 return render(request, 'blog/post_list.html', {'posts': posts}) def post_detail(request, pk): # 根据 pk 获取单篇文章,如果不存在则返回 404 错误 post = get_object_or_404(Post, pk=pk) return render(request, 'blog/post_detail.html', {'post': post})
步骤 6:创建模板
-
创建模板目录:Django 默认在
templates目录下寻找模板,为了组织清晰,我们创建blog/templates/blog/目录结构。mysite/ └── blog/ └── templates/ └── blog/ └── post_list.html └── post_detail.html -
编写
post_list.html(首页):<!-- blog/templates/blog/post_list.html --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>我的博客</title> </head> <body> <h1>文章列表</h1> <ul> {% for post in posts %} <li> <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a> </li> {% empty %} <li>暂无文章</li> {% endfor %} </ul> </body> </html>{% for ... %}和{% endfor %}是循环标签。{{ post.title }}是变量输出标签。{% url 'post_detail' pk=post.pk %}使用了我们在urls.py中定义的name来生成 URL,这是一种好习惯。
-
编写
post_detail.html(详情页):<!-- blog/templates/blog/post_detail.html --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>{{ post.title }}</title> </head> <body> <h1>{{ post.title }}</h1> <p><strong>作者:</strong> {{ post.author.username }}</p> <p><strong>发布时间:</strong> {{ post.created_at }}</p> <hr> <p>{{ post.content }}</p> <a href="{% url 'post_list' %}">返回文章列表</a> </body> </html>
步骤 7:创建超级用户并访问后台管理
Django 自带一个非常强大的后台管理系统。
-
创建超级用户:
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
-
启动开发服务器:
python manage.py runserver
-
访问网站:
- 打开浏览器,访问
http://127.0.0.1:8000/,你应该能看到文章列表页面(虽然现在是空的)。 - 访问
http://127.0.0.1:8000/admin/,用你刚刚创建的超级用户名和密码登录,登录后,你可以在 "Content types" 和 "Sessions" 下面看到 "Posts",点击 "Posts" -> "Add",就可以创建新文章了!创建几篇文章后,再回到首页查看效果。
- 打开浏览器,访问
第三部分:进阶主题与最佳实践
当你掌握了基础后,可以探索更多强大的 Django 功能:
-
静态文件处理:
- 作用:处理 CSS、JavaScript、图片等文件。
- 配置:在
settings.py中设置STATIC_URL和STATICFILES_DIRS,在模板中使用{% load static %}和{% static 'path/to/file.css' %}来引用静态文件。
-
表单处理:
- 作用:创建用户提交表单的页面(如评论、登录、注册)。
- 实现:Django 提供了
django.forms模块,可以轻松创建表单类,处理用户输入、验证数据并保存到数据库。
-
用户认证系统:
- 作用:处理用户注册、登录、注销、密码修改等功能。
- 实现:Django 内置了完整的用户认证系统,你只需要在
urls.py中引入django.contrib.auth.urls,并创建相应的登录/注销模板即可。
-
类视图:
-
作用:将视图函数封装成类,使代码更结构化、可复用。
-
实现:
ListView可以自动为你获取一个列表并渲染到模板,DetailView可以自动获取单个对象,你的views.py会变成这样:from django.views.generic import ListView, DetailView from .models import Post class PostListView(ListView): model = Post template_name = 'blog/post_list.html' context_object_name = 'posts' class PostDetailView(DetailView): model = Post template_name = 'blog/post_detail.html' context_object_name = 'post'
-
-
部署:
- 作用:将你的本地网站部署到云服务器上,让所有人都能访问。
- 流程:
- 使用 Gunicorn 或 uWSGI 作为应用服务器。
- 使用 Nginx 作为反向代理和静态文件服务器。
- 配置数据库(如 PostgreSQL)。
- 使用 Docker 可以极大地简化部署流程。
使用 Django 开发网站是一个结构化、高效的过程,从 MVT 架构开始,通过定义模型、编写视图、创建模板和配置 URL,你可以快速构建功能强大的 Web 应用。
推荐资源:
- 官方文档:Django Documentation (强烈推荐,非常详尽)
- Django Girls Tutorial:一个为初学者准备的免费在线教程,非常经典。
- 实践项目:尝试添加评论功能、分页、搜索等功能来巩固你的知识。
