使用Django REST framework构建RESTful API
- Django REST framework简介
- 安装Django REST framework
- 创建Django项目
- 创建Django应用
- 配置Django项目
- 创建模型
- 迁移数据库
- 创建序列化器
- 创建视图
- 配置URL
- 配置全局URL
- 配置认证和权限
- 测试API
- 使用Postman测试API
- 分页
- 过滤和排序
- 自定义视图
- 异常处理
- 文档
- 总结
Django REST framework (DRF) 是一个功能强大的工具包,用于构建Web API。它与Django框架无缝集成,提供了许多开箱即用的功能,如序列化、认证、权限、分页和视图等。本文将详细介绍如何使用Django REST framework构建RESTful API。
Django REST framework 是一个用于构建Web API的框架,它旨在使构建API变得简单和快速。DRF提供了许多强大的功能,如自动化的API浏览界面、序列化器、视图集、路由等。 首先,需要安装Django和Django REST framework。pip install django djangorestframework
使用Django创建一个新的项目。
django-admin startproject myproject
cd myproject
在项目中创建一个新的应用。
python manage.py startapp myapp
在项目的
settings.py
文件中,添加
rest_framework
和新创建的应用到
INSTALLED_APPS
列表中。
INSTALLED_APPS = [
# ...
'rest_framework',
'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()
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.title
运行迁移命令以创建数据库表。
python manage.py makemigrations
python manage.py migrate
在
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', 'price']
在
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
在
urls.py
文件中配置URL路由。
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)),
]
在项目的
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')),
]
在
settings.py
文件中配置认证和权限。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
启动Django开发服务器,访问API。
python manage.py runserver
打开浏览器,访问http://127.0.0.1:8000/api/books/
,可以看到API的浏览界面。
settings.py
文件中配置分页。
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
在
views.py
文件中配置过滤和排序。
from rest_framework import filters
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
filter_backends = [filters.SearchFilter, filters.OrderingFilter]
search_fields = ['title', 'author']
ordering_fields = ['published_date', 'price']
可以创建自定义视图来处理特定的业务逻辑。
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET'])
def book_list(request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
在
views.py
文件中配置异常处理。
from rest_framework.exceptions import NotFound
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
def retrieve(self, request, *args, **kwargs):
try:
return super().retrieve(request, *args, **kwargs)
except Http404:
raise NotFound(detail='Book not found')
可以使用Swagger或Redoc等工具生成API文档。
pip install drf-yasg
在urls.py
文件中配置Swagger。
from django.urls import path, include
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='My API',
default_version='v1',
description='Test description',
terms_of_service='https://www.google.com/policies/terms/',
contact=openapi.Contact(email='contact@myapi.local'),
license=openapi.License(name='BSD License'),
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('myapp.urls')),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
通过本文,你已经学习了如何使用Django REST framework构建RESTful API。我们介绍了Django REST framework的基本概念、安装方法、创建Django项目和应用、定义模型、创建序列化器、创建视图、配置URL、配置认证和权限、测试API、使用Postman测试API、分页、过滤和排序、自定义视图、异常处理、生成API文档等内容。掌握了这些知识,将有助于你在实际工作中更好地利用Django REST framework来构建高效、可靠的Web API。
使用Django REST framework可以显著简化RESTful API的开发过程。