目录
- Django 是什么?
- 为什么选择 Django?
- 环境准备
- 核心概念:MTV 架构
- 开发流程:一个完整的 Django 项目示例
- 步骤 1:创建项目和应用
- 步骤 2:定义模型
- 步骤 3:配置数据库
- 步骤 4:创建和管理后台
- 步骤 5:创建视图和 URL 路由
- 步骤 6:编写模板
- 步骤 7:静态文件处理
- Django 进阶
- 表单处理
- 用户认证系统
- 类视图
- 中间件
- 项目部署
- 学习资源和最佳实践
Django 是什么?
Django 是一个由 Python 编写的高级 Web 框架,它遵循 "电池已 included"(Batteries Included) 的理念,意味着它自带了许多 Web 开发中常用的功能模块,让你可以专注于业务逻辑,而不用重复造轮子。

Django 遵循 MVC 设计模式,但在 Django 中,它被具体化为 MTV 模式。
为什么选择 Django?
- 快速开发:Django 的高度抽象和丰富的内置库让你能快速构建原型和完整的应用。
- 安全:Django 默认提供了许多安全措施,如防止 SQL 注入、跨站脚本攻击、跨站请求伪造等。
- 可扩展:从一个小型博客到像 Instagram、Pinterest 这样的大型网站,Django 都能很好地应对。
- 强大的 ORM:对象关系映射让你可以用 Python 代码操作数据库,而无需编写复杂的 SQL 语句。
- 完善的管理后台:几行代码就能自动生成一个功能强大的后台管理界面,用于管理你的数据。
- 活跃的社区:拥有庞大而活跃的开发者社区,文档齐全,第三方库丰富。
环境准备
在开始之前,你需要准备好 Python 环境。
-
安装 Python:从 Python 官网 下载并安装最新稳定版的 Python。
-
安装虚拟环境:强烈建议为每个项目创建一个独立的虚拟环境,以避免包版本冲突。
(图片来源网络,侵删)# 创建一个名为 myproject_env 的虚拟环境 python -m venv myproject_env # 激活虚拟环境 # Windows: myproject_env\Scripts\activate # macOS / Linux: source myproject_env/bin/activate
-
安装 Django:在激活的虚拟环境中,使用
pip安装 Django。pip install django
核心概念:MTV 架构
理解 MTV 是学习 Django 的关键。
- M - Model (模型):负责与数据库交互,定义你的数据结构(如文章、用户、评论等),Django 会根据这些模型自动创建数据库表。
- T - Template (模板):负责展示层,是 HTML 文件,其中可以嵌入 Django 的模板语言 来动态地显示数据。
- V - View (视图):业务逻辑层,它是 Python 函数或类,接收 Web 请求,从 Model 中获取数据,然后将数据传递给 Template,最后生成一个 HTTP 响应返回给用户。
数据流:URL -> View -> Model -> View -> Template -> Response
开发流程:一个完整的 Django 项目示例
我们将创建一个简单的博客应用,包含文章列表和文章详情页。

步骤 1:创建项目和应用
- 项目:一个 Django 项目的实例,是配置和应用的集合。
- 应用:一个 Web 应用,实现特定的功能(如博客、商店、论坛等)。
# 创建一个名为 myblog 的新项目 django-admin startproject myblog # 进入项目目录 cd myblog # 创建一个名为 blog 的新应用 python manage.py startapp blog
现在你的项目结构应该如下:
myblog/
├── myblog/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── blog/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py
注册应用:打开 myblog/settings.py,在 INSTALLED_APPS 列表中添加你的应用。
# myblog/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 添加这行
]
步骤 2:定义模型
打开 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)
content = models.TextField()
# 作者关联到内置的 User 模型
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
创建数据库迁移:Django 需要将你的模型定义转换为数据库表结构。
# 生成迁移文件 python manage.py makemigrations # 应用迁移,创建数据库表 python manage.py migrate
步骤 3:配置数据库
默认情况下,Django 使用 SQLite,这是一个轻量级的文件数据库,非常适合开发,在生产环境中,你可能会使用 PostgreSQL 或 MySQL。
- SQLite: 无需额外配置,直接使用。
- PostgreSQL/MySQL: 需要安装相应的数据库客户端库(如
psycopg2-binary),然后在settings.py的DATABASES设置中配置连接信息。
步骤 4:创建和管理后台
Django 最酷的功能之一就是自动生成后台。
-
创建超级用户:
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
-
注册模型:打开
blog/admin.py,将你的Post模型注册到后台。# blog/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
-
运行服务器并访问后台:
python manage.py runserver
打开浏览器,访问
http://127.0.0.1:8000/admin/,用你刚才创建的超级用户登录,你就可以在这里创建、编辑和删除文章了!
步骤 5:创建视图和 URL 路由
视图是处理请求并返回响应的核心。
-
编写视图:打开
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().order_by('-created_at') return render(request, 'blog/post_list.html', {'posts': posts}) def post_detail(request, pk): post = get_object_or_404(Post, pk=pk) return render(request, 'blog/post_detail.html', {'post': post}) -
配置 URL 路由:
-
在应用内部创建
urls.py文件 (blog/urls.py)。# blog/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), path('post/<int:pk>/', views.post_detail, name='post_detail'), ] -
在主项目的
urls.py(myblog/urls.py) 中包含应用的 URL。# myblog/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls')), # 添加这行 ]
-
步骤 6:编写模板
模板是用户最终看到的 HTML 页面。
-
创建模板目录结构:Django 默认在
templates目录下查找模板,你需要按照应用的名称创建子目录,以避免模板名冲突。blog/ └── templates/ └── blog/ ├── base.html # 基础模板,包含通用的头部和尾部 ├── post_list.html # 文章列表页 └── post_detail.html # 文章详情页 -
编写模板代码:
-
blog/templates/blog/base.html<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>我的博客</title> </head> <body> <header> <h1><a href="{% url 'post_list' %}">我的博客</a></h1> </header> <main> {% block content %} {# 子模板将在这里填充内容 #} {% endblock %} </main> </body> </html> -
blog/templates/blog/post_list.html{% extends 'blog/base.html' %} {% block content %} <h2>文章列表</h2> {% for post in posts %} <article> <h3><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h3> <p>{{ post.created_at }}</p> </article> {% empty %} <p>暂无文章。</p> {% endfor %} {% endblock %} -
blog/templates/blog/post_detail.html{% extends 'blog/base.html' %} {% block content %} <article> <h2>{{ post.title }}</h2> <p><small>作者: {{ post.author }} | 发布于: {{ post.created_at }}</small></p> <hr> <p>{{ post.content }}</p> </article> {% endblock %}
-
步骤 7:静态文件处理
静态文件是 CSS、JavaScript、图片等不随每次请求而改变的内容。
-
创建静态文件目录:与
templates类似,推荐在应用下创建static目录,并按应用名组织。blog/ └── static/ └── blog/ └── css/ └── style.css -
在模板中引用静态文件:
- 首先在模板的顶部加载
static- 然后使用
{% static %}标签来引用文件路径。 - 然后使用
<!-- blog/templates/blog/base.html --> {% load static %} <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>我的博客</title> <link rel="stylesheet" href="{% static 'blog/css/style.css' %}"> </head> <!-- ... --> - 首先在模板的顶部加载
-
配置
STATIC_URL:在settings.py中,STATIC_URL = '/static/'已经默认配置好了,当你在DEBUG=True(开发模式)时,Django 会自动提供这些静态文件。
Django 进阶
表单处理
Django 的 Form 类可以轻松处理用户输入、验证数据并生成 HTML 表单。
-
创建表单类:在
blog/forms.py中定义。# blog/forms.py from django import forms from .models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = ('title', 'content') -
在视图中使用表单:处理 GET 和 POST 请求。
-
在模板中渲染表单:
{{ form.as_p }}可以快速生成表单段落。
用户认证系统
Django 自带一个强大的用户认证系统,处理用户注册、登录、注销、密码管理等,你可以直接使用它,也可以进行自定义。
类视图
视图不一定要是函数,也可以是类,类视图提供了更强大的代码组织和复用能力,ListView(列表视图)、DetailView(详情视图)、CreateView(创建视图)等,可以大大减少视图中的代码量。
中间件
中间件是一个轻量级的“插件”,用于在请求和响应处理的整个生命周期中执行代码,你可以用中间件来实现用户认证、CSRF 保护、记录请求日志等。
项目部署
开发完成后,你需要将项目部署到生产服务器上。
-
设置
DEBUG = False:在settings.py中,将DEBUG设置为False,并设置ALLOWED_HOSTS。# myblog/settings.py DEBUG = False ALLOWED_HOSTS = ['yourdomain.com', 'your_server_ip']
-
使用 WSGI 服务器:Django 自带的开发服务器 (
runserver) 不适合生产环境,你需要使用 WSGI 服务器,如 Gunicorn 或 uWSGI。# 安装 Gunicorn pip install gunicorn # 运行 Gunicorn gunicorn --workers 3 myblog.wsgi:application
-
使用反向代理:直接让用户访问 Gunicorn 端口不安全,通常使用 Nginx 或 Apache 作为反向代理。
- Nginx:接收来自外部的 HTTP/HTTPS 请求。
- Gunicorn:在内部运行你的 Django 应用,处理 Nginx 转发过来的请求。
-
使用环境变量:将敏感信息(如数据库密码、密钥)存储在环境变量中,而不是硬编码在
settings.py中,可以使用python-decouple或django-environ库。 -
使用 Docker:将你的应用、依赖和配置打包到一个 Docker 容器中,实现环境一致性和简化部署。
学习资源和最佳实践
- 官方文档:Django Documentation 是最权威、最全面的学习资料。
- Django Girls Tutorial:一个非常好的入门教程,手把手教你构建一个博客。
- 最佳实践:
- 保持应用小而专注。
- 善用 Django 的内置功能,不要重复造轮子。
- 编写可复用的模板标签和过滤器。
- 使用
get_absolute_url()为模型定义规范的 URL。 - 定期更新你的依赖包以获取安全补丁。
希望这份指南能帮助你顺利入门 Django 开发!祝你编码愉快!
