使用Django REST Framework快速开发API接口
以下是使用 Django 和 Django REST Framework (DRF) 开发 API 接口的核心步骤,涵盖模型、迁移、序列化、视图、路由等关键环节:
前言
什么是DRF?
Django REST Framework(DRF) 是基于Django的一个强大且灵活的工具包,用于快速构建Web API。它提供了序列化、认证、权限、分页等开箱即用的功能,极大简化了API开发流程。
一. 创建 Django 项目和应用
python3.11.1版本
# 创建项目
pip install django==5.2
django-admin startproject myproject
cd myproject# 创建应用
python manage.py startapp myapi
二. 安装依赖
创建虚拟环境
python -m venv venv
在 requirements.txt 中添加:
django==5.2
djangorestframework==3.16.0
mysqlclient==2.2.7
安装依赖:
pip install -r requirements.txt
三. 配置 DRF 和数据库
在 settings.py 中启用 DRF 和数据库:
INSTALLED_APPS = [...'rest_framework','myapi',
]# 数据库配置(默认 SQLite)
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',},#'default': {# 'ENGINE': 'django.db.backends.mysql',# 'NAME': 'mydb', # 数据库名称# 'USER': 'myuser', # MySQL用户名# 'PASSWORD': 'mypassword',# MySQL密码# 'HOST': 'localhost', # 数据库主机地址(默认为localhost)# 'PORT': '3306', # 数据库端口(默认3306)# 'OPTIONS': {# 'charset': 'utf8mb4', # 确保字符集正确# 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # 启用严格模式# # 如果使用MySQL 8.0+且遇到认证问题,可能需要以下选项# # 'auth_plugin': 'mysql_native_password',# },#}
}
解决MySQL 8.0+认证问题(如需要)
如果遇到caching_sha2_password错误,修改MySQL用户认证方式:
ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
FLUSH PRIVILEGES;
四. 定义数据模型
在 myapi/models.py 中创建模型:
from django.db import modelsclass Book(models.Model):title = models.CharField(max_length=200)author = models.CharField(max_length=100)published_date = models.DateField()def __str__(self):return self.title
五. 创建并应用数据库迁移
# 生成迁移文件
python manage.py makemigrations# 应用迁移
python manage.py migrate
六. 创建序列化器
在 myapi/serializers.py 中定义序列化器:
from rest_framework import serializers
from .models import Bookclass BookSerializer(serializers.ModelSerializer):class Meta:model = Bookfields = '__all__' # 序列化所有字段
七. 编写视图
在 myapi/views.py 中使用 DRF 的视图类:
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer# 列表和创建操作
class BookListCreateView(generics.ListCreateAPIView):queryset = Book.objects.all()serializer_class = BookSerializer# 单个对象的获取、更新、删除
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):queryset = Book.objects.all()serializer_class = BookSerializer
八. 配置 URL 路由
在 myapi/urls.py 中定义路由:
from django.urls import path
from .views import BookListCreateView, BookDetailViewurlpatterns = [path('books/', BookListCreateView.as_view(), name='book-list'),path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
]
在主项目的 urls.py 中包含应用路由:
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('api/', include('myapi.urls')),
]
九. 测试 API
# 启动开发服务器
python manage.py runserver
访问以下端点测试:
http://localhost:8000/api/books/:获取所有书籍或创建新书籍(POST)。http://localhost:8000/api/books/1/:操作单个书籍(GET/PUT/DELETE)
十. 使用视图集和路由器(简化代码)
若需进一步简化,可使用 ViewSet 和 Router:
# views.py
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializerclass BookViewSet(viewsets.ModelViewSet):queryset = Book.objects.all()serializer_class = BookSerializer# urls.py
from rest_framework.routers import DefaultRouter
from .views import BookViewSetrouter = DefaultRouter()
router.register(r'books', BookViewSet)urlpatterns = [path('', include(router.urls)),
]
关键步骤总结
1.模型定义:通过 Django 模型定义数据结构。2.迁移操作:使用 makemigrations 和 migrate 同步数据库。3.序列化器:DRF 的 ModelSerializer 将模型转换为 JSON。4.视图类:通用视图(ListCreateAPIView, RetrieveUpdateDestroyAPIView):快速实现 CRUD。视图集(ModelViewSet):结合路由器自动生成 URL。5.路由配置:手动定义或使用 DefaultRouter 自动生成。6.权限控制:按需添加认证和权限类。
常用命令速查
操作 | 命令 |
---|---|
创建迁移文件 | python manage.py makemigrations |
应用迁移 | python manage.py migrate |
创建超级用户 | python manage.py createsuperuser |
启动开发服务器 | python manage.py runserver |
通过以上步骤,你可以快速构建一个符合 RESTful 规范的 API,并灵活扩展功能(如分页、过滤、文档生成)