DJango REST Frameworkの俺的メモ

構築編

Posted by めろん on 2024/09/03 10:24

初期設定

settings.pyに以下の項目を日本語に変更


# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

APIの追加

コマンドラインで以下を入力してAPIアプリの作成をする


python manage.py startapp [アプリ名]

アプリ名のところに自分の好きな名前をいれ作成する。

VSCodeのデバッガーの設定

.vscode/launch.jsonに以下を設定

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python デバッガー: Django",
            "type": "debugpy",
            "request": "launch",
            "args": [
                "runserver"
            ],
            "django": true,
            "autoStartBrowser": false,
            "program": "${workspaceFolder}manage.py"
        }
    ]
}

アプリとフレームワークの設定追加

settings.pyに以下の項目を追加


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    '[追加したアプリ名]',
]


これ忘れると動かないので注意。

モデルの追加

追加したアプリ名フォルダ下にあるmodels.pyを編集。



from django.db import models

# Create your models here.
class test(models.Model):
   hogehoge = models.CharField(max_length=7)


保存したいデータを追加

vscode拡張機能追加

serializer.pyの追加

追加したアプリ名フォルダに下にあるserializer.pyを新規追加。



from rest_framework import serializers
from .models import test

class TestSerializer(serializers.ModelSerializer):
    class Meta:
        model = test
        fields = "__all__"



view.pyの編集

APIの実装部分の追加

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import test
from .serializer import TestSerializer

# Create your views here.

class TestAPIView(APIView):
    # このビューからオブジェクトを返すために使用されるクエリセット。通常、この属性を設定するか、メソッドをオーバーライドする必要があります。
    # ビュー メソッドをオーバーライドする場合は、このプロパティに直接アクセスするのではなく、get_queryset()呼び出すことが重要です。
    # 呼び出すと、一度評価され、その結果は後続のすべてのリクエストに対してキャッシュされます。
    queryset = test.objects.all()
    # 入力の検証と逆シリアル化、および出力のシリアル化に使用するシリアライザー クラス。
    # 通常、この属性を設定するか、メソッドをオーバーライドする必要がありますget_serializer_class()。
    serializer_class = TestSerializer

    # lookup_field - 個々のモデル インスタンスのオブジェクト ルックアップを実行するために使用するモデル フィールド。
    # デフォルトは「pk」です。ハイパーリンクされた API を使用する場合、カスタム値を使用する必要がある場合は、
    # API ビューとシリアライザー クラスの両方でルックアップ フィールドが設定されていることを確認する必要があることに注意してください。

    def get(self, request, format=None):
        print(request.query_params)
        usernames = ['hello, world']
        return Response(usernames)

    def post(self, request):
        return Response({'succeeded': True})


model部分は触っていないが、テストテンプレートなので、気にしないこと。
シリアライザ部分についてもここではややこしくなるので省略している。

urls.pyの設定

アプリ名の下にurls.pyを新規で追加。




以下を追加

from .views import TestAPIView
from django.urls import path

# 公開API名の設定
urlpatterns = [
    path('test_api_name/', TestAPIView.as_view()),
]



rootのurls.pyにAPIのパスを追加




先ほど追加したアプリAPIをフレームワークに認識させる必要があるので追加。

"""
URL configuration for django_api project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('[追加したアプリ名]/', include('[追加したアプリ名].urls'))
]


パスは最後に「/」を忘れずに。

PowerShellでcurl(Invoke-WebRequest)

powershellでcurlすると「Invoke-WebRequest」のエイリアスなので使い方が少し異なるので面食らうことになる。
使い方は以下の通り。




マイグレーション

マイグレーションファイルの作成

python manage.py makemigrations [追加したアプリ名]

マイグレーション実行

python manage.py migrate

環境変数の追加

pip install django-environ


でインストール

manage.pyがある直下のフォルダに、「.env」ファイル作成。

シークレットキーの作成

python manage.py shell


from django.core.management import utils
print(utils.get_random_secret_key())


管理ユーザの追加

python manage.py createsuperuser