目录
- 为什么选择 Django?
- 环境准备
- 安装 Python
- 安装 Django
- 创建虚拟环境(强烈推荐)
- Django 项目结构详解
- 核心概念:模型、视图、模板
- 实战:构建一个简单的博客应用
- 步骤 1:创建项目和 App
- 步骤 2:定义模型
- 步骤 3:创建视图和 URL 路由
- 步骤 4:编写模板
- 步骤 5:数据库迁移
- 步骤 6:运行服务器并查看结果
- Django Admin 后台
- 静态文件处理
- 表单处理
- 进阶主题
- 总结与学习资源
为什么选择 Django?
Django 遵循 "DRY" (Don't Repeat Yourself) 原则,并提供了许多开箱即用的功能:
- ORM (Object-Relational Mapper):用 Python 类来定义数据库表结构,无需编写 SQL。
- 自动生成的后台管理界面:几行代码就能为你创建一个功能强大的后台。
- 优雅的 URL 设计:URL 与 Python 代码解耦,清晰易读。
- 模板引擎:分离业务逻辑和前端展示。
- 安全防护:内置了 CSRF、XSS、SQL 注入等 Web 常见攻击的防护。
- 可扩展性:从个人博客到大型社交网络(如 Instagram),Django 都能胜任。
环境准备
安装 Python
Django 需要 Python 3.8 或更高版本,请确保你已经安装了 Python,可以在终端/命令行中输入:
python --version # 或 python3 --version
创建虚拟环境(强烈推荐)
虚拟环境可以隔离不同项目的依赖,避免包冲突。
-
创建虚拟环境:
# 在你的项目文件夹外执行 mkdir my_django_project cd my_django_project python -m venv venv
venv是虚拟环境的文件夹名,你可以自定义。
-
激活虚拟环境:
- Windows:
.\venv\Scripts\activate
- macOS / Linux:
source venv/bin/activate
激活后,你的终端提示符前会出现
(venv)。
- Windows:
安装 Django
在激活的虚拟环境中,使用 pip 安装 Django:
pip install django
Django 项目结构详解
当你创建一个 Django 项目后,你会看到类似这样的文件结构:
myproject/
├── manage.py # 命令行工具,用于与项目交互(如运行服务器、迁移数据库)
├── myproject/ # 项目配置包
│ ├── __init__.py
│ ├── asgi.py # 用于运行 ASGI 兼容的 Web 服务器
│ ├── settings.py # 项目的核心配置文件(数据库、时区、应用等)
│ ├── urls.py # 项目的根 URL 配置
│ └── wsgi.py # 用于运行 WSGI 兼容的 Web 服务器
└── venv/ # 虚拟环境文件夹
核心概念:
- 项目:一个完整的 Web 应用。
myproject就是一个项目。 - 应用:项目中的一个独立模块,实现特定功能(如博客、用户系统、商店),一个项目可以包含多个应用。
核心概念:模型、视图、模板
理解这三个概念是掌握 Django 的关键。
- 模型:定义你的数据结构,它就像一个数据库表的“蓝图”,告诉 Django 如何存储和操作数据,每个模型对应一个数据库表。
- 视图:接收 Web 请求,处理业务逻辑(如查询数据库、计算数据),然后返回一个响应,响应通常是渲染后的 HTML 页面。
- 模板:HTML 文件,用于展示数据,它包含特殊的语法(如
{{ variable }}和{% tag %}),用于将视图传递过来的数据动态地插入到 HTML 中。
工作流程:
- 用户通过浏览器访问一个 URL。
- Django 的
urls.py检查 URL,将其映射到一个特定的 视图 函数。 - 视图 函数执行代码,可能从 模型 中获取数据。
- 视图 将数据传递给一个 模板。
- 模板 渲染最终的 HTML 页面。
- Django 将 HTML 页面作为响应发送回用户的浏览器。
MVT 架构:这其实是 Model-View-Template (MVT) 架构,但 Django 将接收请求和返回响应的部分称为 "View",而将业务逻辑部分称为 "View Function",这一点初学者可能会混淆。
实战:构建一个简单的博客应用
我们将创建一个博客,可以显示文章列表和单篇文章详情。
步骤 1:创建项目和 App
-
创建项目:
# 确保你在虚拟环境中 django-admin startproject myblog cd myblog
-
创建 App:
python manage.py startapp blog
-
注册 App:打开
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()
created_at = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.title
步骤 3:创建视图和 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}) -
配置 App 的 URL:在
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'), ] -
配置项目的主 URL:打开
myblog/urls.py,引入 blog 应用的 URL。# myblog/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), # 添加这一行 ]
步骤 4:编写模板
-
创建模板文件夹:在
blog文件夹下创建templates/blog/目录。myblog/ └── blog/ └── templates/ └── blog/ └── post_list.html └── post_detail.html -
创建
post_list.html:<!-- blog/templates/blog/post_list.html --> <!DOCTYPE html> <html lang="zh"> <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> -
创建
post_detail.html:<!-- blog/templates/blog/post_detail.html --> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>{{ post.title }}</title> </head> <body> <h1>{{ post.title }}</h1> <p>作者: {{ post.author }}</p> <p>发布时间: {{ post.created_at }}</p> <hr> <p>{{ post.content }}</p> <a href="{% url 'post_list %}">返回列表</a> </body> </html>
步骤 5:数据库迁移
Django 需要将你定义的模型转换成实际的数据库表。
- 生成迁移文件:
python manage.py makemigrations
- 应用迁移:
python manage.py migrate
步骤 6:运行服务器并查看结果
-
创建超级用户(用于 Admin 后台):
python manage.py createsuperuser # 按提示输入用户名、邮箱和密码
-
启动开发服务器:
python manage.py runserver
-
访问网站:
- 博客首页:打开浏览器访问
http://127.0.0.1:8000/ - Admin 后台:访问
http://127.0.0.1:8000/admin/,用你刚刚创建的超级用户登录,你可以为Post模型添加一些测试文章。
- 博客首页:打开浏览器访问
Django Admin 后台
我们已经看到了 Admin 后台的强大之处,它让你可以轻松管理网站的数据。
-
注册模型:为了让
Post模型在 Admin 后台显示,打开blog/admin.py:# blog/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
刷新 Admin 页面,你就可以看到
Posts并进行增删改查了。
静态文件处理
静态文件是 CSS、JavaScript、图片等文件,Django 默认会在 static 文件夹中查找它们。
-
创建静态文件目录:
myblog/ └── blog/ └── static/ └── blog/ └── css/ └── style.css -
在模板中使用静态文件:在模板开头加载
static<!-- blog/templates/blog/post_list.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> ...
表单处理
Django 的表单处理非常优雅,它自动生成 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') -
在视图中使用表单:修改
blog/views.py,添加创建文章的视图。 -
在模板中渲染表单:创建一个
post_new.html模板,使用{{ form.as_p }}来渲染表单字段。
进阶主题
当你掌握了基础后,可以探索更多高级特性:
- 类视图:用类代替函数来组织视图代码,更清晰、可复用。
- Django REST Framework:轻松构建强大的 API。
- 用户认证系统:Django 内置了完善的用户注册、登录、注销和权限管理。
- 中间件:在请求和响应之间执行代码的钩子,用于处理会话、认证等。
- 缓存:提升网站性能。
- 部署:将你的应用部署到生产环境(如 Nginx + Gunicorn + Docker)。
总结与学习资源
Django 是一个功能全面的“全能型”框架,它能让你专注于业务逻辑,而将底层细节(如数据库、安全、管理后台)交给框架处理,通过“模型-视图-模板”的架构,它提供了清晰的开发模式。
推荐学习资源:
- 官方文档:Django Documentation (强烈推荐,最权威、最全面)
- Django Girls Tutorial:https://tutorial.djangogirls.org/zh/ (非常适合初学者的交互式教程)
- Coursera / Udemy 课程:搜索 "Django Web Development",有许多高质量的付费课程。
- 开源项目:在 GitHub 上找一些小型的 Django 项目,阅读源码是学习的最佳途径之一。
祝你 Django 学习愉快!
