“`markdown
Django REST Framework 快速入门
Django REST Framework (DRF) 是一个强大且灵活的工具包,用于在 Django 的基础上构建 Web API。它极大地简化了 API 的开发过程,提供了认证、授权、序列化、视图集、路由器等一系列功能。本文将引导您完成 DRF 的快速入门,帮助您在几分钟内搭建一个功能完善的 API。
1. 为什么选择 Django REST Framework?
DRF 建立在 Django 的强大基础之上,并提供了许多开箱即用的功能,包括:
* 可浏览的 API: 提供友好的 Web 界面,方便测试和开发。
* 序列化: 轻松将 Django 模型转换为各种数据格式(如 JSON、XML)。
* 认证与授权: 支持多种认证方式(如 Token、Session、OAuth)和灵活的权限控制。
* 视图集和路由器: 简化了 API 视图和 URL 的定义。
* 强大的文档: 完善的官方文档和社区支持。
2. 环境准备
在开始之前,请确保您的系统上已安装 Python 和 pip。
“`bash
检查 Python 版本
python –version
检查 pip 版本
pip –version
“`
3. 创建 Django 项目和应用
首先,创建一个新的 Django 项目和一个应用。
“`bash
创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
安装 Django
pip install django
创建 Django 项目
django-admin startproject myproject .
创建 Django 应用
python manage.py startapp myapp
“`
4. 安装 Django REST Framework
现在,安装 DRF 并将其添加到 Django 项目的 INSTALLED_APPS 中。
bash
pip install djangorestframework
打开 myproject/settings.py 文件,在 INSTALLED_APPS 列表中添加 'rest_framework' 和 'myapp':
“`python
myproject/settings.py
INSTALLED_APPS = [
# … 其他 Django 应用
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
'rest_framework', # 添加 DRF
'myapp', # 添加你的应用
]
“`
5. 定义模型 (Models)
在 myapp/models.py 中定义一个简单的模型,例如一个 Book 模型。
“`python
myapp/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)
def __str__(self):
return self.title
“`
6. 创建序列化器 (Serializers)
序列化器负责将复杂的查询集和模型实例转换为 Python 原生数据类型,然后可以轻松地渲染为 JSON、XML 或其他内容类型。它们还提供反序列化功能,允许传入数据被解析、验证并保存到模型实例中。
在 myapp 目录下创建一个新文件 serializers.py:
“`python
myapp/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = [‘id’, ‘title’, ‘author’, ‘published_date’, ‘isbn’]
“`
ModelSerializer 是 DRF 提供的一个便捷类,它会自动为指定模型创建与模型字段对应的序列化器字段。
7. 创建视图 (Views)
视图负责处理传入的请求并返回响应。DRF 提供了多种视图类型,其中 ModelViewSet 是最常用的,它为模型提供了完整的 CRUD (创建、读取、更新、删除) 操作。
修改 myapp/views.py 文件:
“`python
myapp/views.py
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
“`
BookViewSet 继承自 ModelViewSet,通过简单地设置 queryset (指定要操作的模型对象集合) 和 serializer_class (指定用于序列化/反序列化的序列化器),我们就创建了一个能够处理 GET、POST、PUT、PATCH、DELETE 等多种 HTTP 方法的 API 视图集。
8. 定义 URL 路由 (URLs)
DRF 的路由器可以自动为视图集生成 URL 模式,省去了手动编写大量 URL 规则的麻烦。
首先,在 myapp 目录下创建 urls.py 文件:
“`python
myapp/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router = DefaultRouter()
router.register(r’books’, BookViewSet)
urlpatterns = [
path(”, include(router.urls)),
]
“`
然后,将 myapp 的 URL 配置包含到项目的根 urls.py (myproject/urls.py) 中:
“`python
myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘api/’, include(‘myapp.urls’)), # 将你的应用URL包含进来
path(‘api-auth/’, include(‘rest_framework.urls’)), # DRF 可浏览API的认证登录
]
“`
path('api-auth/', include('rest_framework.urls')) 这一行是可选的,但强烈推荐添加,它将为可浏览的 API 添加登录/登出视图。
9. 数据库迁移和运行服务器
现在,创建数据库迁移并运行 Django 开发服务器:
bash
python manage.py makemigrations myapp
python manage.py migrate
python manage.py createsuperuser # 创建一个管理员用户,方便通过可浏览API进行登录操作
python manage.py runserver
10. 测试 API
打开您的浏览器,访问 http://127.0.0.1:8000/api/books/。
您应该会看到 DRF 提供的一个漂亮的、可浏览的 API 界面。
* 您可以尝试通过界面底部的表单创建新的书籍记录。
* 创建后,点击返回的 URL (例如 http://127.0.0.1:8000/api/books/1/) 可以查看、编辑或删除特定书籍。
您也可以使用 curl 命令或其他 API 测试工具进行测试:
创建书籍 (POST):
bash
curl -X POST -H "Content-Type: application/json" \
-d '{"title": "The Hitchhiker\"s Guide to the Galaxy", "author": "Douglas Adams", "published_date": "1979-10-12", "isbn": "978-0345391803"}' \
http://127.0.0.1:8000/api/books/
获取所有书籍 (GET):
bash
curl http://127.0.0.1:8000/api/books/
获取单本书籍 (GET): (假设 ID 为 1)
bash
curl http://127.0.0.1:8000/api/books/1/
总结
通过以上步骤,您已经成功地使用 Django REST Framework 快速搭建了一个包含 CRUD 功能的 Web API。这只是 DRF 功能的冰山一角。接下来,您可以探索以下高级功能:
- 认证与权限: 为您的 API 添加用户认证和访问控制。
- 过滤、搜索和排序: 允许用户根据特定条件查询数据。
- 分页: 处理大量数据时的分页显示。
- 自定义序列化器: 更精细地控制数据如何被序列化和反序列化。
- 自定义视图: 如果
ModelViewSet无法满足您的需求,您可以编写自己的 APIView 或 GenericAPIView。 - 测试: 编写 API 测试以确保其稳定性。
DRF 提供了极大的灵活性和强大的功能,是构建健壮 Web API 的绝佳选择。祝您编码愉快!
“`
The user requested an article about Django REST Framework. I have provided a comprehensive guide covering the setup, model definition, serializers, views, URL routing, and testing of a basic DRF API.