Järgige seda samm-sammult juhendit ja teil on CRUD API tuum, millele edasi arendada.

Django Rest Framework (DRF) on Django raamistik, mis pakub tuge REST API-de loomiseks. Nagu Django, võimaldab DRF teil luua API vaateid funktsioonipõhiste või klassipõhiste vaadetega.

Kuigi klassipõhiste vaadetega võib alguses olla keeruline töötada, pakuvad need eeliseid, nagu parem koodi struktuur, korduvkasutatavus, pärilikkus ja kokkuvõtlikkus.

Looge Django REST Frameworkiga retseptihalduri API

Retseptihalduri rakendus on suurepärane viis DRF-i klassipõhiste vaadete tundmaõppimiseks. Funktsioonid, nagu retseptide lisamine, kustutamine ja redigeerimine, aitavad teil mõista, kuidas rakendada CRUD (loomine, lugemine, värskendamine, kustutamine) toiminguid. Järgmised sammud õpetavad teile, kuidas luua CRUD API-d.

Selle juhendi koodi leiate aadressilt GitHub.

1. samm: installige Django REST Framework ja konfigureerige oma projekt

  1. Looge oma projekti jaoks virtuaalne keskkond ja installige järgmised sõltuvused:
    pip install django djangorestframework
  2. instagram viewer
  3. Looge Django projekt nimega tuum järgmise käsuga:
    django-admin startproject core .
  4. Looge rakendus nimega retsepti_haldur:
    python manage.py startapp recipe_manager
  5. Ava oma core/settings.py faili ja navigeerige INSTALLED_APPS loend oma rakenduste registreerimiseks:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

2. samm: looge oma retseptirakenduse jaoks mudel

  1. Ava oma recept_manager/models.py faili ja looge oma rakendusele mudel. Siin on retseptimudeli põhinäide:
    # models.py
    from django.db import models

    classRecipe(models.Model):
    recipe_name = models.CharField(max_length=255)
    ingredients = models.TextField()
    instructions = models.TextField()

  2. Looge migratsioonid ja migreerige oma mudel andmebaasi selle käsuga:
    python manage.py makemigrations && python manage.py migrate

3. samm: looge oma rakenduse jaoks jadaseade

Serialiseerija on Django komponent, mis aitab teil teisendada keerukaid andmetüüpe (nt päringukomplekti) vormingusse, mida saate renderdada (nt JSON või XML) ja vastupidi.

Serialiseerija loomiseks toimige järgmiselt.

  1. Looge fail nimega retsepti_manager/serializers.py.
  2. Importige serialisaatorid moodul ja mudel, mida soovite seeriastada:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. Samas failis looge oma mudelile jadajadamise klass ja määrake Meta klass selles:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    Selles koodis on Meta klass määrab serialiseeritava mudeli ja konkreetsed väljad, mida serialiseerija peaks käsitlema. The väljad atribuut võib olla kas loend või korteež. Kui soovite oma mudeli kõiki välju järjestada, saate seda teha järgmiselt.
    classMeta:
    fields = "__all__"

4. samm: kirjutage toimingu CREATE jaoks vaade

Saate luua oma rakenduse jaoks klassipõhiseid vaateid, importides Djangos saadaoleva üldise vaate. Nende vaadete kohta saate lugeda alates Django ametlik dokumentatsioon. CRUD-i toimingu CREATE rakendamiseks peaksite importima Loo APIView. Samuti peaksite importima oma serialiseerija ja mudeli:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Toimingu CREATE rakendamiseks peate määrama ainult serialisaatori, mida teie vaade peaks kasutama. Siin on näide:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

Selle seadistuse abil saate teha oma rakendusele POST-i päringuid.

5. samm: kirjutage toimingule READ vaade

  1. Toimingu READ rakendamiseks importige ListAPIView teie vaadetele. See vaade aitab teil loetleda mudeliobjektid:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Looge oma vaadete jaoks klass ja määrake kasutatav jadajadaja ja päringukomplekt:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Looge vaade konkreetse retsepti lugemiseks. Selleks vajate RetrieveAPIView nii et lisage see oma imporditavate toodete loendisse:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Järgmisena looge vajalik vaade:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

6. samm: kirjutage UPDATE ja DELETE operatsioonide vaated

Toimingute UPDATE ja DELETE rakendamiseks vajate Värskenda APIView ja DestroyAPIView importige need vastavalt:

from rest_framework.generics import (
ListAPIView,
CreateAPIView,
RetrieveAPIView,
UpdateAPIView, # new
DestroyAPIView, # new
)

Järgmisena looge vaated, nagu varemgi. Seekord pärivad teie vaated Värskenda APIView ja DestroyAPIView, vastavalt:

# Update view
classRecipeUpdateView(UpdateAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

# Delete view
classRecipeDeleteView(DestroyAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

7. toiming: looge oma rakendusele URL-id

  1. Lisage see kood core/urls.py URL-ide seadistamiseks:
    from django.urls import path, include

    urlpatterns = [
    path('api/', include('recipe_manager.urls'))
    ]

  2. Lisage omale järgmine kood retsepti_manager/urls.py fail:
    from django.urls import path
    from. import views

    urlpatterns = [
    # List view (Read all)
    path('recipes/', views.RecipeListView.as_view(), name='recipe-list'),

    # Create view
    path('recipes/create/', views.RecipeCreateView.as_view(), name='recipe-create'),

    # Retrieve view (Read one)
    path('recipes//', views.RecipeRetrieveView.as_view(), name='recipe-retrieve'),

    # Update view
    path('recipes//update/', views.RecipeUpdateView.as_view(), name='recipe-update'),

    # Delete view
    path('recipes//delete/', views.RecipeDeleteView.as_view(), name='recipe-destroy'),
    ]

    Ülaltoodud koodi põhjal näete, et klassipõhised vaated kasutavad as_view() URL-i mustrite loomiseks. Samuti saate lugeda selle kohta Django projekti ja rakenduse erinevused kui olete nende kasutamisest siin segaduses.

8. samm: testige oma API lõpp-punkte

Käivitage oma projektikataloogist järgmine:

python manage.py runserver

See peaks käivitama teie serveri, tegema mõned kontrollid ja printima URL-i, mille kaudu saate sellele juurde pääseda.

Nüüd saate oma API lõpp-punkte testida, navigeerides vastavatele URL-idele (nt /api/recipes/) ja saatmine HTTP päringu meetodid CRUD operatsioonide jaoks. Peaksite nägema sellist vaikimisi liidest:

Brauseri kasutamise asemel saate seda teha testige oma API-t Postmaniga.

DRY harjutamine CRUD API loomisel

DRY (Ära korda ennast) on a programmeerimispõhimõte, mida peaksite omaks võtma koodi kvaliteedi parandamiseks.

Kuigi ülalkirjeldatud vaated töötavad hästi, saate vältida palju kordusi, kui kasutate ListCreateAPIView ja RetrieveUpdateDestroyAPIView üldised vaated.

ListCreateAPIView ühendab ListAPIView ja Loo APIView, samas kui RetrieveUpdateDestroyAPIView ühendab RetrieveAPIView, Värskenda APIView, ja DestroyAPIView.

Saate oma eelmisi vaateid muuta selliseks, et see näeks välja järgmine:

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView

from .models import Recipe
from .serializers import RecipeSerializer

classRecipeListCreateAPIView(ListCreateAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

classRecipeRetrieveUpdateDeleteAPIView(RetrieveUpdateDestroyAPIView):
serializer_class = RecipeSerializer
queryset = Recipe.objects.all()

See lähenemisviis vähendab koodi üldist kogust.

Uute vaadete jaoks saate luua URL-e järgmiselt.

from django.urls import path
from .views import RecipeListCreateAPIView, RecipeRetrieveUpdateDeleteAPIView

urlpatterns = [
# List and Create view
path('recipes/', RecipeListCreateAPIView.as_view(), name='recipe-list-create'),

# Retrieve, Update, and Delete view
path('recipes//', RecipeRetrieveUpdateDeleteAPIView.as_view(), name='recipe-retrieve-update-destroy'),
]

Saate neid lõpp-punkte testida Postmani või mõne muu rakendusega API testimise tööriist eelistad.

Üldised klassipõhised vaated muudavad teie töö lihtsamaks

Nagu eespool näha, võivad üldised klassipõhised vaated vaadete loomise protsessi kiirendada. Nüüd peate pärima ainult oma kasutusjuhtumi jaoks õige APIView.

Samuti peaksite järgima häid programmeerimistavasid, et mitte kirjutada halba koodi.