后端API配置简化
Django
众所周知,Django
是一个全栈框架,基于MVT
设计模式,但目前主流开发为前后分离模式,无需使用Django
提供的template
功能,因此仅需集成API
模块即可。
创建项目
安装好环境后,使用
django-admin startproject project_name
完成项目的创建,项目目录结构如下图:

精简
点击进入setting.py
文件中,主要关注INSTALLED_APPS
和MIDDLEWARE
:

针对INSTALLED_APPS
:
INSTALLED_APPS = [
'django.contrib.admin', # 可移除
'django.contrib.auth', # 用于用户认证
'django.contrib.contenttypes', # 所有模型的注册中心或者目录,ORM核心依赖
'django.contrib.sessions', # 使用JWT等Token认证技术可移除
'django.contrib.messages', # 可移除
'django.contrib.staticfiles', # 可移除
]
应用名称 (Application) | 主要功能 | 是否可移除 | 移除条件与说明 |
---|---|---|---|
django.contrib.admin | 提供功能强大的后台管理界面 | 可移除 | 不需要使用 Django 自带的后台管理功能,可以安全地移除 。 |
django.contrib.auth | 实现用户认证和授权系统 | 不可移除 | Django 权限系统的核心,提供用户身份信息,许多第三方应用的依赖 。 |
django.contrib.contenttypes | 内容类型框架,用于追踪项目中的所有模型,为模型提供高级通用接口 | 不可移除 | ORM 的核心依赖,许多 Django 内部机制(如权限系统)和第三方应用依赖于此框架 。 |
django.contrib.sessions | 支持会话管理 | 可移除 | 若 API 完全采用 Token 认证(如 JWT),无需服务端 Session,可移除 。 |
django.contrib.messages | 实现一次性通知功能 | 可移除 | 纯 API 项目一般无需使用消息框架,可以移除 |
django.contrib.staticfiles | 管理静态文件(如 CSS、JavaScript、图片) | 可移除 | 前后端分离时,前端资源通常由独立服务(如 Nginx)或 CDN 托管,可以移除 。 |
此外对于纯后端项目还需要额外安装以下第三方应用:
rest_framework
:提供restfulAPI支持。corsheaders
:实现跨域请求。此外,由于移除了admin应用,因此对于初始的Django项目中的urls.py中需要同步删除admin相关内容,如下:
删除之前:
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
删除之后(即可编写自己的请求路径):
urlpatterns = [ ]
针对MIDDLEWARE
:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 安全防护中间件
'django.contrib.sessions.middleware.SessionMiddleware', # 与Session应用同步移除
'django.middleware.common.CommonMiddleware', # URL 规范化中间件
'django.middleware.csrf.CsrfViewMiddleware', # 表单提交认证,可移除
'django.contrib.auth.middleware.AuthenticationMiddleware', # 权限认证基石
'django.contrib.messages.middleware.MessageMiddleware', # 与message应用同步移除
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 可移除
]
中间件名称 (Middleware) | 主要功能 | 可否移除 | 移除建议与说明 |
---|---|---|---|
SecurityMiddleware | 安全防护(设置安全HTTP头、HTTPS重定向、防XSS等) | 否 | 必须保留。核心安全屏障,生产环境尤为重要。 |
SessionMiddleware | 会话管理(基于Cookie或URL保持用户状态) | 可选 | 若API完全采用Token认证(如JWT),无需服务端Session,可移除。移除后需同步移除 sessions App。 |
CommonMiddleware | 提供基础功能(URL规范化、APPEND_SLASH自动补全斜杠、禁用不存在URL的访问) | 建议保留 | 可移除,但其提供的URL规范化等基础功能通常有益,建议保留。 |
CsrfViewMiddleware | CSRF防护(验证POST请求中的CSRF令牌) | 可选 | 前后端分离项目通常使用Token认证,可移除。若保留,需为API视图添加 @csrf_exempt 装饰器。 |
AuthenticationMiddleware | 用户认证(为每个请求附加 request.user 对象) | 否 | 必须保留。它是Django权限系统的基石,提供用户身份信息。 |
MessageMiddleware | 消息框架(在请求间传递一次性提示消息) | 可选 | 纯API项目一般无需使用消息框架,可移除。移除后需同步移除 messages App。 |
XFrameOptionsMiddleware | 点击劫持防护(通过设置X-Frame-Options响应头限制页面被嵌入) | 可选 | 纯API服务返回的是数据而非HTML页面,通常可移除。 |
此外对于纯后端项目还需要额外安装以下第三方中间件:
'corsheaders.middleware.CorsMiddleware'
:实现跨域请求。
移除后以及添加restfulAPI支持与跨域支持后的列表:

补充:进一步精简Django配置(针对纯API项目)
1. 移除模板配置
# 删除整个TEMPLATES配置块
# 完全删除以下配置块
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2. 移除静态文件配置
# 删除STATIC_URL配置
STATIC_URL = 'static/' # 完全删除此行
3. 移除密码验证器
# 删除整个AUTH_PASSWORD_VALIDATORS配置块
# 删除整个密码验证器配置块
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
4. 简化国际化配置(分离情况下在前端进行国际化)
# 禁用国际化
USE_I18N = False # 改为 False
USE_TZ = False # 改为 False(除非需要时区支持)
# 可选:删除语言和时区配置(使用默认值即可)
LANGUAGE_CODE = 'en-us' # 可删除
TIME_ZONE = 'UTC' # 可删除
5. 精简后的完整配置示例
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'django-insecure-!sn7rpw08=y11tialx9zrh3ap6%8oq=a$ki%^y@21e%p%5bn#u'
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'rest_framework',
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
]
ROOT_URLCONF = 'simplified_django.urls'
WSGI_APPLICATION = 'simplified_django.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
CORS_ALLOW_ALL_ORIGINS = True
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
]
}
额外建议
- 安全强化:
DEBUG = False
SECRET_KEY = '生成强密码替换此处'
ALLOWED_HOSTS = ['your-api-domain.com']
- 自定义用户模型:
AUTH_USER_MODEL = 'users.CustomUser'
- 数据库优化(使用其他数据库):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}