一、restframework-bulk批量更新
1、restframework-bulk是一個通過rest framework實現的批量更新和刪除視圖的庫。使用它,可以通過一次API請求來對多個對象執行update或delete操作,提高API操作的效率。
下面是使用restframework-bulk的示例代碼:
from rest_framework import generics
from rest_framework_bulk import (
BulkListSerializer,
BulkSerializerMixin,
BulkUpdateAPIView,
BulkDestroyAPIView,
)
from .serializers import ExampleSerializer
from .models import ExampleModel
class ExampleBulkUpdateView(BulkUpdateAPIView):
"""
批量更新Example對象
"""
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
lookup_field = 'id'
class ExampleBulkDeleteView(BulkDestroyAPIView):
"""
批量刪除Example對象
"""
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
lookup_field = 'id'
在視圖中繼承BulkUpdateAPIView或BulkDestroyAPIView,並設置queryset和serializer_class,就可以使用restframework-bulk擴展了。同時,需要在serializer中使用BulkListSerializer而不是ListSerializer。
二、安裝restframework
1、安裝rest_framework的最簡單方法是使用pip:
pip install djangorestframework
2、在settings.py文件中添加“rest_framework”到INSTALLED_APPS。
INSTALLED_APPS = [
...
'rest_framework',
]
3、在urls.py文件中添加rest_framework的默認url:
from django.urls import path, include
urlpatterns = [
# ...
path('api-auth/', include('rest_framework.urls'))
]
這將為rest_framework添加默認的身份驗證和瀏覽API視圖(包括確認API視圖)。
三、序列化器(serializers)
1、序列化器將數據轉換為python對象,以便轉換為JSON等格式。
下面是一個使用序列化器的示例:
from rest_framework import serializers
from .models import ExampleModel
class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = ExampleModel
fields = '__all__'
在上面的代碼中,ExampleSerializer擴展自serializers.ModelSerializer,它是一個模型序列化器,它將model中的所有內容導出。
如果要更細粒度地控制序列化過程,則可以使用Field類來定義要序列化哪些字段以及要顯示的名稱和說明信息。以下是格式如何指定序列化器:
from rest_framework import serializers
class ExampleSerializer(serializers.Serializer):
id = serializers.IntegerField()
title = serializers.CharField(max_length=200, help_text="標題")
content = serializers.CharField(help_text="內容")
在serializer中,定義一個字段Field對象,這些字段對應於model的屬性或外鍵關係,實現rest API的讀、寫等操作。
四、視圖(views)
1、使用rest framework的第一步是編寫視圖。下面是一個簡單的視圖示例:
from rest_framework import generics
from .models import ExampleModel
from .serializers import ExampleSerializer
class ExampleList(generics.ListCreateAPIView):
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
class ExampleDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
在上面的代碼中,ExampleList和ExampleDetail視圖繼承自generics.ListCreateAPIView和generics.RetrieveUpdateDestroyAPIView,它們是一些通用視圖類,提供了快捷方式來使用通用的獲取、創建、更新和刪除操作。
2、使用django的視圖裝飾器也可以定義API視圖,下面是示例代碼:
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import ExampleModel
from .serializers import ExampleSerializer
@api_view(['GET', 'POST'])
def example_list(request):
if request.method == 'GET':
snippets = ExampleModel.objects.all()
serializer = ExampleSerializer(examples, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ExampleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
@api_view(['GET', 'PUT', 'DELETE'])
def example_detail(request, pk):
try:
example = ExampleModel.objects.get(pk=pk)
except ExampleModel.DoesNotExist:
return Response(status=404)
if request.method == 'GET':
serializer = ExampleSerializer(example)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = ExampleSerializer(example, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=400)
elif request.method == 'DELETE':
example.delete()
return Response(status=204)
以上代碼使用了API視圖函數裝飾器@api_view來定義視圖。它們處理HTTP GET/POST/PUT/DELETE請求,返回JSON格式的響應。
五、認證和授權(authentication & authorization)
1、在Django Rest Framework中,可以使用身份驗證和授權來保護API端點。默認情況下,REST Framework提供了一些身份驗證方案:
BasicAuthentication(基本身份驗證):使用基本HTTP身份驗證。
SessionAuthentication(會話身份驗證):依賴於Django會話框架。使用會話認證的API不需要使用API密鑰的用戶。
TokenAuthentication(令牌認證):為每個用戶生成唯一的API令牌。
JWTAuthentication(JSON Web Token身份驗證):JSON Web Token是一個開放標準(RFC 7519),用於在網絡中安全地傳輸聲明。它可以用於認證系統。
可以在settings.py中設置REST_FRAMEWORK.DEFAULT_AUTHENTICATION_CLASSES來選擇認證方式:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
],
}
2、授權也可以保護API。可以在settings.py中設置REST_FRAMEWORK.DEFAULT_PERMISSION_CLASSES來選擇授權方式:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
3、可以為每個視圖或整個應用程序定義身份驗證和授權。可以使用@api_view修飾符為單個視圖指定身份驗證和授權方案。
例如,如果要使用基本身份驗證和會話身份驗證來保護一個API視圖,在@api_view中添加authentication_classes和permission_classes參數,如下所示:
@api_view(['GET'])
@authentication_classes([BasicAuthentication, SessionAuthentication])
@permission_classes([IsAuthenticated])
def example_api(request):
# your code
小結
本文對Django Rest Framework進行了綜合性的介紹,包括restframework-bulk、安裝restframework、序列化器(serializers)、視圖(views)和認證和授權(authentication & authorization),希望能夠幫助讀者快速掌握該框架的使用。
原創文章,作者:MBMEH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/330199.html