Django REST Framework
Django REST Framework ( DRF )
DRF 是一个 Django 的第三方应用,主要用于快速构建 Restful API 服务器
在原生 Django 提供更加简洁的 CRUD 实现、数据序列化反序列化、权限、认证等功能
下载安装
zsh
# 1. 在项目中创建并启用虚拟环境
% cd [项目名]
% python -m venv [虚拟环境]
% source [虚拟环境]/bin/activate
# 2. 在虚拟环境中下载安装 Django
(虚拟环境) % pip install Django==4.2.16
# 3. 在虚拟环境中下载安装 DRF 相关的包
(虚拟环境) % pip install djangorestframework==3.15.2
(虚拟环境) % pip install markdown
(虚拟环境) % pip install django-filter
架构组成
txt
Client
┏━━ DRF + Djang ━━━━━━━━━━━━━━━━━━━━━━━━▼━━━━━━━━━━━━━━━━━━━━━━━┓
┃ URL ┃
┃ ┏━━━━━━━━━━━━━━━━━━▼━━━━ Application ━┓ ┃
┃ ┃ Router ┃ ┃
┃ ┃ ▼ ┃ ┃
┃ ┏━━━━━━━━━━━━━━┓ ┃ ViewSets ┃ ┃
┃ ┃ Django Admin ┃ ┃ ▼ ┃ ┃
┃ ┣━━━━━━━━━━━━━━╋━━╋━━━━━━━━━━━━━━━ Models ┃ ┃
┃ ┃ BrowsableAPI ┃ ┃ ▼ ┃ ┃
┃ ┗━━━━━━┳━━━━━━━┛ ┃ Serializers ┃ ┃
┃ ┃ ┃ ▼ ┃ ┃
┃ ┃ ┗━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━┛ ┃
┗━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▼━━━━━━━━━━━━━━━━━━━━━━━┛
┗━━━━━━━━━━━━━━━━━━━━━━━▶ Database
txt
Client
┏━━ Djang ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━▼━━━━━━━━━━━━━━━━━━━━━━━┓
┃ URL ┃
┃ ┏━━━━━━━━━━━━━━━━━━▼━━━━ Application ━┓ ┃
┃ ┃ Sub URL ┃ ┃
┃ ┃ ▼ ┃ ┃
┃ ┃ Views ┃ ┃
┃ ┃ ┏━━━━━━━━━━┻━━━━━━━━━━┓ ┃ ┃
┃ ┏━━━━━━━━━━━━━━┓ ┃ ▼ ▼ ┃ ┃
┃ ┃ Django Admin ┣━━╋━━━━ Models ━━━━━━━━━━━▶ Templates ▶ ▶ ▶ ▶ ▶
┃ ┗━━━━━━┳━━━━━━━┛ ┃ ▲ ┃ ┃
┃ ┃ ┗━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃
┗━━━━━━━━━╋━━━━━━━━━━━━━━━━━━▼━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┗━━━━━━━━━━━━▶ Database
原生 Django | Django REST Framework | |
---|---|---|
路由 | 手写 URL | Router |
视图 | Views | ViewSets |
模型 | Models | Models |
数据序列化 | 在视图中直接操作 Models | Serializers 操作 Models |
测试与管理界面 | Django Admin | Django Admin + Browsable API |
前提配置
py
INSTALLED_APPS = [
# ...
"rest_framework",
"rest_framework.authtoken",
]
REST_FRAMEWORK = {
# 分页配置
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
"PAGE_SIZE": 100,
# 日期时间格式
"DATETIME_FORMAT": "%Y-%m-%dT%H:%M:%S%z",
# 解析器
"DEFAULT_PARSER_CLASSES": [
"rest_framework.parsers.JSONParser",
"rest_framework.parsers.FormParser",
"rest_framework.parsers.MultiPartParser",
],
# 渲染器
"DEFAULT_RENDERER_CLASSES": [
"rest_framework.renderers.JSONRenderer",
"rest_framework.renderers.BrowsableAPIRenderer",
],
# 权限控制
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticated",
],
# 认证方式
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.BasicAuthentication",
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication",
],
}
py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("api-auth/", include("rest_framework.urls")),
]