R / Richie全部文章 ↑

Python · 3 分钟阅读

Django 主要功能模块

一张图速览 Django 提供的核心能力。

总览

模块 作用 关键字
ORM 对象 ↔ 数据库表映射 Model、QuerySet
认证授权 用户、组、权限、登录态 auth、Permission
Admin 自动生成后台管理界面 ModelAdmin
视图 处理请求并返回响应 FBV / CBV
模板 HTML 渲染 DTL、Jinja2
表单 数据校验与 HTML 生成 Form、ModelForm
信号 框架级发布-订阅 pre_save、post_save
路由 URL → 视图映射 path、re_path
中间件 请求/响应钩子 process_request
缓存 提升响应速度 cache_page

下面逐一展开。

ORM

把 Python 类映射成数据库表,对表的操作转化为对象操作。

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=150)
    password = models.CharField(max_length=128)
User.objects.all()                          # 全部
User.objects.filter(name__contains='a')     # 模糊
User.objects.create(name='b', password='c') # 新增

认证授权

  • 内置 User、AnonymousUser、Group 三个 Model
  • 默认给每个 Model 提供 add / change / delete 三个权限
  • 提供装饰器与 Mixin 实现视图级鉴权

Admin

零配置后台:注册 Model 即可获得增删改查界面,支持过滤、搜索、排序、字段分组等定制。

视图

from django.http import HttpResponse

def hello(request):
    return HttpResponse("<h1>Hello Django</h1>")

视图就是一个可调用对象,接收 HttpRequest、返回 HttpResponse。

模板

将 HTML 从 Python 中抽离:

<html><body>{{ value }}</body></html>
return render(request, "hello.html", {"value": "Hello Django"})

表单

from django import forms

class LoginForm(forms.Form):
    name = forms.CharField()
    password = forms.CharField()

提供四项能力:自动生成 HTML、校验数据、回显错误、转换为 Python 类型。

信号

发布-订阅模式,用于在框架特定时机触发自定义逻辑。

from django.core.signals import request_started
from django.dispatch import receiver

@receiver(request_started)
def on_request(sender, **kwargs):
    print("Request Coming")

路由

from django.urls import path

urlpatterns = [
    path("bbs/", views.bbs),                              # 固定
    path("bbs/<int:pk>/", views.detail),                  # 动态
    path("topic/", include("topic.urls")),                # 分发
]

中间件

对所有请求统一"加工"的钩子链,按 settings.MIDDLEWARE 顺序执行。

钩子函数:process_request → process_view → 视图 → process_response。

缓存

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def heavy_view(request):
    ...

支持按视图、按片段、按站点多粒度缓存,底层可对接 Memcached、Redis、数据库或文件系统。