988 字
5 分钟
Django开发记录(零):Django后端开发基础
2025-03-15
无标签

Django后端开发基础#

项目背景

在开始Django项目开发之前,我们需要掌握后端开发的基础知识。本篇将详细介绍Django框架的核心概念和关键技术,为后续开发打下坚实基础。

技术特点
  • 清晰的框架架构
  • 强大的ORM支持
  • 灵活的URL路由
  • 完善的模板系统

1. Django框架基础#

1.1 框架架构#

架构设计

Django采用MTV架构:

  • Model:数据模型层
  • Template:模板层
  • View:视图层
# 项目结构示例
project/
├── manage.py              # 项目管理脚本
├── project/               # 项目配置目录
│   ├── __init__.py
│   ├── settings.py        # 项目设置
│   ├── urls.py            # URL配置
│   └── wsgi.py            # WSGI配置
└── app/                   # 应用目录
    ├── models.py          # 数据模型
    ├── views.py           # 视图函数
    ├── urls.py            # URL路由
    └── templates/         # 模板文件

1.2 核心概念#

核心概念

Django的核心概念包括:

  • 项目和应用
  • 模型和数据库
  • 视图和URL
  • 模板和表单
# 应用示例
from django.db import models
from django.urls import path
from django.shortcuts import render

# 模型定义
class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

# 视图函数
def user_list(request):
    users = User.objects.all()
    return render(request, "user_list.html", {"users": users})

# URL配置
urlpatterns = [
    path("users/", user_list, name="user_list"),
]

2. 数据库操作#

2.1 ORM基础#

ORM特点

Django ORM提供:

  • 对象关系映射
  • 查询构建器
  • 事务管理
  • 数据验证
# 模型定义
class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        ordering = ["-created_at"]
        
    def __str__(self):
        return self.title

# 数据操作
# 创建
article = Article.objects.create(
    title="Django基础",
    content="Django是一个强大的Web框架",
    author=user
)

# 查询
articles = Article.objects.filter(
    author=user
).order_by("-created_at")

# 更新
article.title = "Django进阶"
article.save()

# 删除
article.delete()

2.2 高级查询#

查询优化

高级查询技巧:

  • 关联查询
  • 聚合操作
  • 子查询
  • 性能优化
# 关联查询
articles = Article.objects.select_related("author").all()

# 聚合操作
from django.db.models import Count, Avg
stats = Article.objects.aggregate(
    total=Count("id"),
    avg_length=Avg("content_length")
)

# 复杂查询
from django.db.models import Q
articles = Article.objects.filter(
    Q(title__icontains="django") |
    Q(content__icontains="python")
).distinct()

3. RESTful API设计#

3.1 API基础#

API设计

RESTful API设计原则:

  • 资源导向
  • 状态转移
  • 统一接口
  • 无状态通信
# 视图类
from rest_framework import viewsets
from rest_framework.response import Response

class ArticleViewSet(viewsets.ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    
    def list(self, request):
        articles = self.get_queryset()
        serializer = self.get_serializer(articles, many=True)
        return Response(serializer.data)
    
    def create(self, request):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)

3.2 序列化器#

序列化

序列化器功能:

  • 数据验证
  • 数据转换
  • 关系处理
  • 自定义字段
# 序列化器定义
from rest_framework import serializers

class ArticleSerializer(serializers.ModelSerializer):
    author_name = serializers.CharField(
        source="author.name",
        read_only=True
    )
    
    class Meta:
        model = Article
        fields = ["id", "title", "content", "author_name"]
        
    def validate_title(self, value):
        if len(value) < 5:
            raise serializers.ValidationError("标题太短")
        return value

4. 安全与认证#

4.1 认证机制#

认证设计

认证机制包括:

  • 用户认证
  • 权限控制
  • 会话管理
  • 安全防护
# 认证视图
from django.contrib.auth import authenticate, login
from rest_framework.authtoken.models import Token

def login_view(request):
    username = request.POST.get("username")
    password = request.POST.get("password")
    user = authenticate(username=username, password=password)
    if user:
        login(request, user)
        token, _ = Token.objects.get_or_create(user=user)
        return Response({"token": token.key})
    return Response({"error": "认证失败"}, status=400)

4.2 权限控制#

权限管理

权限控制策略:

  • 基于角色的访问控制
  • 对象级权限
  • 自定义权限
  • 权限缓存
# 权限类
from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.author == request.user

# 视图使用
class ArticleViewSet(viewsets.ModelViewSet):
    permission_classes = [IsOwnerOrReadOnly]
    # ...

总结#

关键收获
  • 掌握了Django框架基础
  • 理解了数据库操作原理
  • 熟悉了API设计方法
  • 了解了安全认证机制
注意事项
  1. 开发规范

    • 遵循PEP 8规范
    • 保持代码简洁
    • 注重代码复用
  2. 性能优化

    • 优化数据库查询
    • 合理使用缓存
    • 控制资源消耗
下一篇预告

在下一篇《环境搭建与基础部署》中,我们将详细介绍:

  • 开发环境配置
  • 项目初始化
  • 基础功能实现
  • 部署方案设计
NOTE

本文是Django开发系列的第零篇,重点介绍了后端开发的基础知识。建议读者在开始项目开发前,先掌握这些基础知识,为后续开发打下坚实基础。