Django REST Framework 安装与配置 #

一、环境要求 #

1.1 系统要求 #

在开始安装之前,请确保你的系统满足以下要求:

要求 版本
Python 3.8+
Django 4.2+
pip 最新版本

1.2 检查Python版本 #

bash
python --version
# 输出: Python 3.11.x

1.3 检查pip版本 #

bash
pip --version
# 输出: pip 24.x from ...

二、安装步骤 #

2.1 创建虚拟环境 #

推荐使用虚拟环境隔离项目依赖:

bash
# 使用 venv 创建虚拟环境
python -m venv drf-env

# 激活虚拟环境
# macOS/Linux
source drf-env/bin/activate

# Windows
drf-env\Scripts\activate

2.2 安装Django和DRF #

bash
# 安装 Django
pip install django

# 安装 Django REST Framework
pip install djangorestframework

# 安装其他常用依赖
pip install django-filter  # 过滤支持
pip install markdown       # Markdown支持(API文档)
pip install pillow         # 图片处理

2.3 验证安装 #

bash
# 验证 Django 安装
python -c "import django; print(django.VERSION)"
# 输出: (4, 2, 0, 'final', 0)

# 验证 DRF 安装
python -c "import rest_framework; print(rest_framework.VERSION)"
# 输出: 3.15.0

三、创建项目 #

3.1 创建Django项目 #

bash
# 创建项目
django-admin startproject myapi

# 进入项目目录
cd myapi

# 创建应用
python manage.py startapp api

3.2 项目目录结构 #

text
myapi/
├── manage.py
├── myapi/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── asgi.py
│   └── wsgi.py
└── api/
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations/
    ├── models.py
    ├── tests.py
    └── views.py

3.3 注册应用 #

编辑 myapi/settings.py

python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 第三方应用
    'rest_framework',
    'django_filters',
    
    # 本地应用
    'api',
]

四、DRF配置 #

4.1 基础配置 #

settings.py 中添加DRF配置:

python
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}

4.2 认证配置 #

python
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ],
}

4.3 权限配置 #

python
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ],
}

4.4 分页配置 #

python
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
}

4.5 完整配置示例 #

python
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ],
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day',
    },
}

五、数据库配置 #

5.1 SQLite(默认) #

Django默认使用SQLite:

python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

5.2 PostgreSQL #

python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

5.3 MySQL #

python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

六、URL配置 #

6.1 配置主URL #

编辑 myapi/urls.py

python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls')),
    path('api/', include('api.urls')),
]

6.2 创建应用URL #

创建 api/urls.py

python
from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.ArticleList.as_view()),
    path('articles/<int:pk>/', views.ArticleDetail.as_view()),
]

七、数据库迁移 #

7.1 创建迁移文件 #

bash
python manage.py makemigrations

7.2 执行迁移 #

bash
python manage.py migrate

7.3 创建超级用户 #

bash
python manage.py createsuperuser

八、开发服务器 #

8.1 启动服务器 #

bash
python manage.py runserver

8.2 指定端口 #

bash
python manage.py runserver 8080

8.3 允许外部访问 #

bash
python manage.py runserver 0.0.0.0:8000

九、常用依赖包 #

9.1 认证相关 #

bash
# JWT认证
pip install djangorestframework-simplejwt

# OAuth认证
pip install django-oauth-toolkit

9.2 文档相关 #

bash
# OpenAPI文档
pip install drf-spectacular

# Swagger UI
pip install drf-yasg

9.3 其他工具 #

bash
# CORS支持
pip install django-cors-headers

# 图片处理
pip install pillow

# 数据库连接池
pip install django-db-connection-pool

十、requirements.txt #

创建 requirements.txt 文件:

text
Django>=4.2
djangorestframework>=3.15
django-filter>=23.0
markdown>=3.5
pillow>=10.0
django-cors-headers>=4.3
djangorestframework-simplejwt>=5.3
drf-spectacular>=0.27

安装所有依赖:

bash
pip install -r requirements.txt

十一、环境变量配置 #

11.1 安装python-dotenv #

bash
pip install python-dotenv

11.2 创建.env文件 #

text
DEBUG=True
SECRET_KEY=your-secret-key-here
DATABASE_URL=postgres://user:password@localhost:5432/mydb
ALLOWED_HOSTS=localhost,127.0.0.1

11.3 在settings.py中使用 #

python
import os
from dotenv import load_dotenv

load_dotenv()

SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG', 'False') == 'True'
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',')

十二、验证安装 #

12.1 创建测试视图 #

api/views.py 中:

python
from rest_framework.response import Response
from rest_framework.views import APIView

class HelloWorld(APIView):
    def get(self, request):
        return Response({'message': 'Hello, DRF!'})

12.2 配置URL #

api/urls.py 中:

python
from django.urls import path
from .views import HelloWorld

urlpatterns = [
    path('hello/', HelloWorld.as_view()),
]

12.3 测试API #

启动服务器后访问:

bash
# 浏览器访问
http://127.0.0.1:8000/api/hello/

# 或使用curl
curl http://127.0.0.1:8000/api/hello/

输出:

json
{
    "message": "Hello, DRF!"
}

十三、常见问题 #

13.1 模块未找到 #

bash
ModuleNotFoundError: No module named 'rest_framework'

解决方案:确保已安装DRF并在虚拟环境中:

bash
pip install djangorestframework

13.2 应用未注册 #

bash
django.core.exceptions.ImproperlyConfigured: ...

解决方案:确保在 INSTALLED_APPS 中添加了 rest_framework

13.3 数据库迁移错误 #

bash
python manage.py migrate --run-syncdb

十四、总结 #

本章我们完成了:

  • DRF的安装和环境配置
  • Django项目的创建和配置
  • DRF的基础设置
  • 数据库配置
  • 开发服务器的启动

现在你已经有了完整的DRF开发环境,让我们进入下一章,创建第一个API!

最后更新:2026-03-28