DRF-APIの実装を試みる

19425 ワード

BAFFのOzilla Python Webプログラミングリファレンスチュートリアル

プロジェクトの作成


  • [参照]で、[New Project]をクリックして新しいプロジェクトを作成します.

  • インストールエラーpip install django

  • フォルダ名configというドラムアイテムを作成します.django-admin startproject config

  • migrateコマンドを使用してデータベースを初期化します.デフォルトでは、リポジトリに含まれるSQLite 3データベースが使用されます.python manage.py migrate

  • createsuperuserコマンドを使用して管理者アカウントを作成します.python manage.py createsuperuser
  • アプリケーションの作成


  • startappコマンドを使用してbookというアプリケーションを作成します.python manage.py startapp booking

  • 作成したアプリケーションを使用するINSTALLED APPSを登録します.
  • #config/settings.py
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'booking',
    ]

    モデルの作成


    必要なデータをモデリングします.
    #booking/models.py
    
    from django.db import models
    from django.conf import settings
    
    class Booking(models.Model):
        subscriber = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, related_name='bookings')
        date_from  = models.DateField()
        date_to = models.DateField(null=True, blank=True)
        room = models.CharField(max_length=100)
        note = models.TextField()
        created = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)
    
        def __str__(self):
            return self.subscriber.username + '' + self.room
    
        class Meta:
            ordering = ['-date_from']
    
    makemigrationsコマンドとmigrateコマンドを実行して、作成したモデルをデータベースに適用します.python manage.py makemigrations booking python manage.py migrate booking

    管理者ページの登録


    作成したモデルを管理するには、管理者ページに登録します.
    #booking/admin.py
    
    from django.contrib import admin
    from .models import Booking
    
    class BookingAdmin(admin.ModelAdmin):
        list_display = ['id', 'subscriber', 'room', 'date_from', 'date_to', 'created', 'updated']
        list_editable = ['room', 'date_from', 'date_to']
        raw_id_fields = ['subscriber']
    
    
    admin.site.register(Booking, BookingAdmin)
    
    管理者ページにログインし、bookモデルを追加および変更できます(http://127.0.0.1:8000/admin).
    リストを追加すると、これに基づいてAPI環境を作成できます.

    API環境の作成


    すべてのAPIビューの作成は無効です.そこでDjango REST Frameworkをインストールし、APIを簡単に作成できます.

  • drfをインストールします.pip install dhangorestframework

  • インストールしたdrfとdrfの設定を設定します.pyに追加します.
  • #config/settings.py
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'booking',
        'rest_framework',
    ]
    #...중략
    
    REST_FRAMEWORK = {
        'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
    }

    Serializerクラスの実装


    Serializerは、APIリクエストを表示するためのモデルのクラスです.通常、GET方式でモデルに関するデータを要求する場合、Serializerを使用してデータが提供される.
    #booking/serializers.py
    
    from .models import Booking
    from rest_framework import serializers
    
    class BookingSerializer(serializers.ModelSerializer):
        class Meta:
            model = Booking
            fields = '__all__'
    ModelSerializerの作成を継承するBookingSerializerというクラスを作成します.モデルが継承されている場合は、単純に直暦化できますが、特に機能しているわけではありませんので、シリアル化クラスを簡単に作成できるクラスと見なすだけでいいです.

    ビューの作成


    データを表示できるSerializerが作成されている以上、データを交換できるビューを作成することができます.
    #booking/views.py
    
    from django.shortcuts import render
    from rest_framework import generics
    
    from .models import Booking
    from .serializers import BookingSerializer
    
    class BookingList(generics.ListCreateAPIView):
        queryset = Booking.objects.all()
        serializer_class = BookingSerializer
    
    
    class BookingDetails(generics.RetrieveUpdateDestroyAPIView):
        queryset = Booking.objects.all()
        serializer_class = BookingSerializer
    
    これらのビューはAPIビューと呼ばれます.APIビューはまた、フレームワークが提供するJENICビューを継承し、簡単にすることもできる.URLを接続して、このビューを確認します.

    リンクURL

    #booking/urls.py
    
    from django.urls import path
    from rest_framework.urlpatterns import format_suffix_patterns
    from .views import *
    
    urlpatterns = [
        path('booking/', BookingList.as_view()),
        path('booking/<int:pk>/', BookingDetails.as_view()),
    ]
    
    ルートurls.Pyも含めて正常な動作をすることができます.
    #config/urls.py
    
    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('booking.urls')),
    ]
    
    runserverを使用すると、http://127.0.0.1:8000/booking urlにアクセスして登録されたサブスクリプションのリストを表示できます.
    上記の詳細は/booking/번호で確認することもできます.

    APIドキュメントの作成


    基本的なAPIが作成されています.これを使用するには、APIドキュメントを提供する必要があります.これは、APIをどのように使用すべきかを外部のユーザに知らせる必要があり、このタスクを容易にするのはdjango-rest-swaggerである.

  • APIドキュメントを自動的に生成するアプリケーションをインストールします.pip install django-rest-swagger==2.1.2

  • settings.pyに追加します.
  • #config/settings.py
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'booking',
        'rest_framework',
        'rest_framework-swagger',
    ]
    
  • urls.pyにget swagger viewメソッドを追加すると、さまざまなAPIビューを検索してドキュメントを自動的に生成できます.
  • #config/urls.py
    
    from django.contrib import admin
    from django.urls import path, include
    from rest_framework_swagger.views import get_swagger_view
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/doc/', get_swagger_view(title='Booking API Manual')),
        path('', include('booking.urls')),
    ]
    
    /api/docアドレスにアクセスすると、以下のAPIドキュメントリストからアクセスできます.

    ドキュメント化されている以上、認証を追加し、ドキュメントでToken機能を使用してみましょう.