REST Framework詳解

一、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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MBMEH的頭像MBMEH
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論