Django RESTful
创建一个 Django RESTful API 是通过 Django REST Framework (DRF) 实现的。以下是一个详细的教程,介绍如何从头开始构建一个简单的 Django RESTful API。
1. 环境准备
1.1 安装 Django 和 Django REST Framework
首先,需要确保安装了 Django 和 Django REST Framework。可以使用 pip 来安装这些库:
pip install django djangorestframework
1.2 创建 Django 项目和应用
使用 Django 命令行工具创建一个新的项目和应用:
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
2. 配置 Django REST Framework
2.1 修改 settings.py
在 myproject/settings.py
文件中,确保 INSTALLED_APPS
中包含以下内容:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 添加 DRF
'myapp', # 添加你的应用
]
2.2 配置 REST Framework 设置
可以在 settings.py
中添加一些基本的 DRF 配置,例如:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
}
3. 创建模型
在 myapp/models.py
中定义一个简单的模型。例如,创建一个用于存储书籍信息的 Book
模型:
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()
def __str__(self):
return self.title
然后,运行以下命令来生成和应用数据库迁移:
python manage.py makemigrations
python manage.py migrate
4. 创建序列化器
序列化器用于将模型实例转换为 JSON 数据。在 myapp/serializers.py
文件中创建一个序列化器类:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
5. 创建视图
在 myapp/views.py
中,使用 DRF 提供的通用视图类来处理 API 请求。我们将创建视图来列出所有书籍以及处理单个书籍的详细信息:
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookListCreate(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
class BookRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
6. 配置路由
在 myapp/urls.py
中配置路由,将 API 端点映射到视图:
from django.urls import path
from .views import BookListCreate, BookRetrieveUpdateDestroy
urlpatterns = [
path('books/', BookListCreate.as_view(), name='book-list-create'),
path('books/<int:pk>/', BookRetrieveUpdateDestroy.as_view(), name='book-detail'),
]
然后,在 myproject/urls.py
中包含应用的 URL 路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('myapp.urls')),
]
7. 测试 API
启动开发服务器并测试 API:
python manage.py runserver
使用浏览器或工具(如 Postman)访问以下 URL 来测试您的 API:
http://127.0.0.1:8000/api/books/
- 获取所有书籍或创建新的书籍。http://127.0.0.1:8000/api/books/1/
- 获取、更新或删除 ID 为 1 的书籍。
8. 扩展功能
8.1 过滤、排序和搜索
使用 django-filter
扩展来实现 API 数据的过滤、排序和搜索功能。
安装 django-filter
:
pip install django-filter
在 settings.py
中配置过滤器:
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
],
}
然后在视图中添加过滤、排序和搜索:
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
class BookListCreate(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
filter_backends = [DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
filterset_fields = ['author', 'published_date']
search_fields = ['title', 'author']
ordering_fields = ['published_date']
8.2 身份验证与权限控制
您可以为 API 添加身份验证和权限控制,例如限制某些 API 端点仅供已认证用户访问:
from rest_framework.permissions import IsAuthenticated
class BookListCreate(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
permission_classes = [IsAuthenticated]
9. 部署
将 Django RESTful API 部署到生产环境时,需要考虑使用 WSGI 服务器(如 Gunicorn)和反向代理(如 Nginx)。另外,确保启用了 HTTPS、数据库优化、缓存等生产环境配置。
10. 进阶功能
10.1 自定义认证
可以扩展或创建自定义的认证系统,比如使用 JWT(JSON Web Token):
pip install djangorestframework-simplejwt
配置 settings.py
:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
10.2 API 文档
DRF 可以与自动化文档工具(如 drf-yasg
)集成,生成 API 的 Swagger 文档:
pip install drf-yasg
配置 URL 路由以生成文档:
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="API 文档",
default_version='v1',
description="Test description",
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]
通过本教程,您应该能够创建一个基本的 Django RESTful API,并理解如何扩展和部署它。Django REST Framework 提供了灵活且功能强大的工具集,可以帮助您轻松构建复杂的 API。