Python Django 框架:全栈 Web 开发
Django 框架:全栈 Web 开发入门
Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。它遵循“电池已包含”的理念,提供了开发安全且可维护的网站所需的几乎所有工具。从内容管理系统到社交网络和科学计算平台,Django 都能胜任。
为什么选择 Django?
- 极速开发:通过模型-模板-视图(MTV)架构和自动化工具,几行代码即可生成管理后台。
- 安全性:默认防范 SQL 注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等常见攻击。
- 可扩展性:清晰的应用结构使得项目很容易拆分为独立模块,方便团队协作。
- 丰富的生态:拥有庞大的社区和第三方包,如 Django REST framework、Celery、django-allauth 等。
Django 核心架构:MTV 模式
Django 采用与经典 MVC 类似的 MTV(Model-Template-View)模式:
- 模型(Model) :数据层,处理数据库结构和数据关系,以 Python 类定义。
- 模板(Template) :表现层,使用 Django 模板语言动态生成 HTML。
- 视图(View) :业务逻辑层,接收请求、处理数据并返回响应,类似控制器。
用户请求 → URL 配置 → 视图(View)
|
┌───────────────┴───────────────┐
| |
模型(Model) 模板(Template)
|
数据库
环境准备与安装
确保已安装 Python 3.8 或更高版本。使用虚拟环境隔离项目依赖:
# 创建虚拟环境
python -m venv myenv
# 激活虚拟环境 (Windows)
myenv\Scripts\activate
# 激活虚拟环境 (macOS/Linux)
source myenv/bin/activate
# 安装 Django
pip install django
检查安装:
python -m django --version
创建第一个 Django 项目
django-admin startproject myproject
cd myproject
生成的项目结构:
myproject/
manage.py # 命令行管理工具
myproject/
__init__.py
settings.py # 全局配置文件
urls.py # 根 URL 声明
asgi.py # ASGI 入口
wsgi.py # WSGI 入口
启动开发服务器测试:
python manage.py runserver
访问 http://127.0.0.1:8000/,看到火箭页面表示项目搭建成功。
创建第一个应用
Django 项目由多个“应用”组成,每个应用完成特定功能。
python manage.py startapp blog
应用目录结构:
blog/
migrations/ # 数据库迁移文件
admin.py # 管理后台注册
apps.py # 应用配置
models.py # 模型定义
views.py # 视图函数
tests.py # 测试代码
将应用注册到项目 settings.py 的 INSTALLED_APPS 中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
'blog', # 添加这一行
]
定义数据模型(Model)
在 blog/models.py 中创建一个简单的文章模型:
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
然后生成并应用数据库迁移:
python manage.py makemigrations blog
python manage.py migrate
强大的 Django 管理后台
Django 自动为你生成一套功能齐全的管理界面。在 blog/admin.py 中注册模型:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
创建超级用户:
python manage.py createsuperuser
启动服务器并访问 http://127.0.0.1:8000/admin/,即可用创建的用户名密码登录,在后台添加、编辑、删除文章,所有操作无需手写一行前端代码。
编写视图(View)与 URL 配置
视图是 Django 处理请求的核心。打开 blog/views.py,编写文章列表视图:
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.filter(published_date__isnull=False).order_by('-published_date')
return render(request, 'blog/post_list.html', {'posts': posts})
然后创建 blog/urls.py 文件,定义应用内部的 URL 模式:
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
最后,在项目的 myproject/urls.py 中包含博客应用的 URL:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
创建模板(Template)
在 blog/ 目录下创建 templates/blog/ 文件夹,新建 post_list.html:
<!DOCTYPE html>
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>博客文章列表</h1>
{% for post in posts %}
<div>
<h2>{{ post.title }}</h2>
<p>发布于: {{ post.published_date }}</p>
<p>{{ post.content|truncatewords:50 }}</p>
</div>
{% empty %}
<p>暂无文章。</p>
{% endfor %}
</body>
</html>
刷新页面 http://127.0.0.1:8000/,就能看到后台发布的文章列表。模板中使用了 Django 模板语言:{% %} 用于标签(如循环、判断),{{ }} 用于输出变量。
处理用户输入:表单(Form)
Django 的表单系统能自动生成 HTML 并验证数据。创建 blog/forms.py:
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'content')
在 views.py 中添加新建文章的视图:
from django.shortcuts import redirect
from .forms import PostForm
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.publish()
return redirect('post_list')
else:
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
对应的模板 templates/blog/post_edit.html:
<h1>新建文章</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">保存</button>
</form>
别忘了在 blog/urls.py 中添加路由:
path('post/new/', views.post_new, name='post_new'),
{% csrf_token %} 是 Django 提供的跨站请求伪造保护,所有 POST 表单都必须包含。
静态文件与美化
Django 通过 STATIC_URL 和 django.contrib.staticfiles 管理静态资源(CSS、JS、图片)。
在 blog/ 下创建 static/blog/style.css:
h1 { color: #2c3e50; font-family: Arial, sans-serif; }
div { margin-bottom: 20px; padding: 10px; border-bottom: 1px solid #ccc; }
在模板顶部加载静态文件:
{% load static %}
<link rel="stylesheet" href="{% static 'blog/style.css' %}">
开发环境中静态文件会自动服务,生产环境需要执行 collectstatic 命令。
用户认证与权限
Django 自带的认证系统可轻松集成。若要区分已发布和草稿,可以在视图中限制访问:
from django.contrib.auth.decorators import login_required
@login_required
def post_draft_list(request):
posts = Post.objects.filter(published_date__isnull=True).order_by('created_date')
return render(request, 'blog/post_draft_list.html', {'posts': posts})
未登录用户访问该视图将自动重定向到登录页。
部署建议
项目开发完成后,推荐以下部署方式:
- 设置生产配置:修改
settings.py中DEBUG=False,配置ALLOWED_HOSTS,生成新的SECRET_KEY。 - 静态文件收集:执行
python manage.py collectstatic,将静态文件集中到STATIC_ROOT。 - 使用 WSGI/ASGI 服务器:如 Gunicorn 或 uWSGI 运行 Django。
- 反向代理:Nginx 或 Apache 处理静态文件并将请求转发给应用服务器。
- 数据库:将 SQLite 更换为 PostgreSQL、MySQL 等生产级数据库。
常见部署平台包括 Heroku、AWS Elastic Beanstalk、DigitalOcean 等,许多平台支持一键部署 Django。
扩展学习路径
- 类视图(Class-Based Views) :用
ListView、DetailView等减少重复代码。 - Django REST framework:构建强大的 Web API。
- 测试:使用 Django 的测试框架编写单元测试和集成测试。
- 异步支持:Django 3.1+ 支持异步视图和中间件。
- 缓存与性能优化:利用缓存框架、数据库索引、查询优化。
Django 的世界非常广阔,但你已掌握了全栈开发的核心循环:定义模型、创建视图、编写模板、配置 URL 和管理后台。接下来只需通过实际项目不断深入,就能成为一名高效的 Django 开发者。