Python Django入門 初めの1歩からWEBアプリ作成までの流れ その20 Django Rest Frameworkを使ってPOSTリクエストでデータベースの更新

みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。

 今回から、Python REST Frameworkを使ったTipsについて連載していこうと思います。初回の今回は、外部からのPOSTリクエストによりデータベースを更新する方法について紹介します。

1. Django REST Frameworkの設定

まず、DjangoプロジェクトにDjango REST Frameworkをインストールし、設定します。

pip install djangorestframework

settings.pyファイルでREST Frameworkをインストールしたことを確認します。

settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
    ...
]

2. Serializerの作成

外部から受け取るデータの形式に合わせたSerializerを作成します。Serializerは受け取るデータのバリデーションやデータベースモデルとの間の変換を担当します。

例えば、models.pyに以下のようなモデルがあるとします。

from django.db import models

class YourModel(models.Model):
    field1 = models.CharField(max_length=100)
    field2 = models.IntegerField()
    ...

それに対応するSerializerを作成します。

from rest_framework import serializers
from .models import YourModel

class YourModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = YourModel
        fields = '__all__'  # すべてのフィールドを使用する場合

3. Viewの作成

外部からのデータを受け取り、データベースを更新するためのViewを作成します。

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import YourModel
from .serializers import YourModelSerializer

class YourModelUpdateAPIView(APIView):
    def post(self, request):
        serializer = YourModelSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

この例では、YourModelUpdateAPIViewはPOSTリクエストを受け取り、送信されたデータをYourModelSerializerでバリデーション・デシリアライズし、データベースに保存します。バリデーションに成功した場合は201 Createdを、失敗した場合は400 Bad Requestを返します。

4. URL設定

ViewをURLにマッピングするための設定を行います。

# urls.py
from django.urls import path
from .views import YourModelUpdateAPIView

urlpatterns = [
    path('api/update/', YourModelUpdateAPIView.as_view(), name='update-your-model'),
    ...
]

5. POSTリクエスト

POSTリクエストを行うためには、さまざまな方法がありますが、ここではPythonのリクエストライブラリであるrequestsを使用して具体的な例を示します。これにより、外部からDjango REST FrameworkのAPIエンドポイントにデータを送信できます。

requestsライブラリのインストール

まず、Pythonのrequestsライブラリをインストールします。ターミナル(またはコマンドプロンプト)で以下のコマンドを実行します。

pip install requests

Pythonコードの例

以下のPythonコードは、requestsライブラリを使用して、指定されたJSONデータを持つPOSTリクエストを送信する方法を示しています。

import requests

# エンドポイントのURLを指定する
url = 'http://example.com/api/update/'  # 実際のエンドポイントのURLに置き換える

# POSTするデータを定義する
data = {
    "field1": "Example Data",
    "field2": 123
}

# POSTリクエストを送信する
response = requests.post(url, json=data)

# レスポンスを表示する
print(response.status_code)  # ステータスコードを表示
print(response.json())       # レスポンスのJSONデータを表示(必要に応じて)

# エラーハンドリング
if response.status_code != 201:
    print('Error:', response.status_code)

コードの解説

  • url: リクエストを送信するAPIのエンドポイントのURLを指定します。実際のURLに置き換えてください。
  • data: POSTリクエストで送信するJSONデータを定義します。ここでは、field1field2を含むJSONオブジェクトを指定しています。
  • requests.post(url, json=data): requestsライブラリのpost関数を使用してPOSTリクエストを送信します。json=dataとすることで、dataの内容がJSON形式で送信されます。
  • response: サーバーからのレスポンスを受け取ります。response.status_codeでHTTPステータスコードを取得し、response.json()でレスポンスのJSONデータを取得することができます。
  • エラーハンドリング: response.status_code201(作成成功)でない場合、エラーメッセージなどを処理することができます。

注意点

  • urlは実際のAPIエンドポイントのURLに置き換えてください。
  • エンドポイントがHTTPSを使用している場合、セキュリティ上の理由から requests のセッションを確立して送信することをお勧めします。
  • エラーハンドリングやデータのバリデーションについては、プロジェクトの要件に応じて適切に処理する必要があります。

これにより、PythonからDjango REST FrameworkのAPIに対してPOSTリクエストを送信し、データを更新することができます。

コメント

タイトルとURLをコピーしました