Slijedite ovaj vodič korak po korak i imat ćete jezgru CRUD API-ja na kojoj možete dalje graditi.

Django Rest Framework (DRF) je Django okvir koji nudi podršku za izgradnju REST API-ja. Poput Djanga, DRF vam omogućuje da izgradite svoje API poglede s prikazima temeljenim na funkcijama ili klasama.

Iako u početku može biti teško raditi s pogledima temeljenim na klasi, oni nude prednosti poput bolje strukture koda, mogućnosti ponovne upotrebe, nasljeđivanja i sažetosti.

Napravite API za upravljanje receptima pomoću Django REST okvira

Aplikacija za upravljanje receptima izvrstan je način za učenje o prikazima temeljenim na klasama u DRF-u. Značajke kao što su dodavanje, brisanje i uređivanje recepata pomoći će vam da razumijete kako implementirati CRUD (Stvaranje, čitanje, ažuriranje, brisanje) operacije. Sljedeći koraci će vas naučiti kako stvoriti CRUD API.

Kôd za ovaj vodič možete pronaći na GitHub.

Korak 1: Instalirajte Django REST Framework i konfigurirajte svoj projekt

  1. Stvorite virtualno okruženje za svoj projekt i instalirajte sljedeće ovisnosti:
    pip install django djangorestframework
  2. Napravite Django projekt pod nazivom jezgra sa sljedećom naredbom:
    django-admin startproject core .
  3. Napravite aplikaciju tzv upravitelj_recepata:
    python manage.py startapp recipe_manager
  4. Otvori svoju jezgra/postavke.py datoteku i idite na INSTALLED_APPS popis za registraciju vaših aplikacija:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

Korak 2: Napravite model za svoju aplikaciju za recepte

  1. Otvori svoju recipe_manager/models.py datoteku i izradite model za svoju aplikaciju. Evo osnovnog primjera modela recepta:
    # models.py
    from django.db import models

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

  2. Stvorite migracije i migrirajte svoj model u bazu podataka ovom naredbom:
    python manage.py makemigrations && python manage.py migrate

Korak 3: Izradite serijalizator za svoju aplikaciju

Serializator je Django komponenta koja vam pomaže pretvoriti složene tipove podataka, kao što je vaš skup upita, u format koji možete prikazati, poput JSON ili XML, i obrnuto.

Za izradu serijalizatora slijedite ove korake:

  1. Napravite datoteku pod nazivom recipe_manager/serializers.py.
  2. Uvezi serijalizatori modul kao i model koji želite serijalizirati:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. U istoj datoteci stvorite klasu serijalizatora za svoj model i definirajte Meta razred u njemu:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    U ovom kodu, Meta klasa definira model za serijalizaciju i specifična polja koja serijalizator treba obraditi. The polja atribut može biti lista ili tuple. Ako želite serijalizirati sva polja u vašem modelu, to možete učiniti ovako:
    classMeta:
    fields = "__all__"

Korak 4: Napišite pogled za operaciju CREATE

Možete stvoriti prikaze temeljene na klasi za svoju aplikaciju uvozom generičkog prikaza dostupnog u Djangu. O tim pogledima možete čitati na Djangova službena dokumentacija. Da biste implementirali CREATE operaciju CRUD-a, trebate uvesti Stvori APIView. Također biste trebali uvesti svoj serijalizator i model:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Da biste implementirali CREATE operaciju, trebate samo navesti serijalizator koji vaš pogled treba koristiti. Evo primjera:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

S ovom postavkom možete postavljati POST zahtjeve svojoj aplikaciji.

Korak 5: Napišite pogled za operaciju READ

  1. Da biste implementirali operaciju READ, uvezite ListAPIView svojim stavovima. Ovaj prikaz vam pomaže da ispišete objekte modela:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Stvorite klasu za svoje prikaze i odredite serijalizator i skup upita koji će se koristiti:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Stvorite prikaz za čitanje određenog recepta. Da biste to učinili, trebate RetrieveAPIView pa ga dodajte na svoj popis uvoza:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Zatim izradite prikaz koji vam je potreban:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

Korak 6: Zapišite poglede za operacije UPDATE i DELETE

Da biste implementirali operacije UPDATE i DELETE, trebate UpdateAPIView i UništiAPIView redom, pa ih uvezite:

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

Zatim stvorite poglede, baš kao što ste radili prije. Ovaj put, vaši stavovi će naslijediti od UpdateAPIView i UništiAPIView, odnosno:

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

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

Korak 7: Izradite URL-ove za svoju aplikaciju

  1. Dodajte ovaj kod u jezgra/urls.py za konfiguraciju URL-ova:
    from django.urls import path, include

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

  2. Dodajte sljedeći kôd svom recipe_manager/urls.py datoteka:
    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'),
    ]

    Iz gornjeg koda primijetit ćete da pogledi temeljeni na klasi koriste as_view() za stvaranje svojih URL uzoraka. Također možete pročitati o razlike između projekta i aplikacije u Djangu ako ste zbunjeni njihovom upotrebom ovdje.

Korak 8: Testirajte svoje API krajnje točke

Iz direktorija vašeg projekta pokrenite sljedeće:

python manage.py runserver

Ovo bi trebalo pokrenuti vaš poslužitelj, izvršiti neke provjere i ispisati URL preko kojeg mu možete pristupiti.

Sada možete testirati svoje API krajnje točke navigacijom do odgovarajućih URL-ova (npr. /api/recipes/) i slanje Metode HTTP zahtjeva za CRUD operacije. Trebali biste vidjeti zadano sučelje poput ovog:

Umjesto da koristite preglednik, možete testirajte svoj API s Postmanom.

Vježbanje DRY tijekom stvaranja CRUD API-ja

DRY (Ne ponavljaj se) je a načelo programiranja koje biste trebali usvojiti poboljšati kvalitetu vašeg koda.

Iako gore napisani pogledi dobro funkcioniraju, možete izbjeći puno ponavljanja korištenjem ListCreateAPIView i RetrieveUpdateDestroyAPIView generički pogledi.

ListCreateAPIView kombinira ListAPIView i Stvori APIView, dok RetrieveUpdateDestroyAPIView kombinira RetrieveAPIView, UpdateAPIView, i UništiAPIView.

Možete izmijeniti svoje prethodne prikaze da izgledaju ovako:

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()

Ovaj pristup smanjuje ukupnu količinu koda.

URL-ove za nove prikaze možete izraditi ovako:

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'),
]

Ove krajnje točke možete testirati s Postmanom ili bilo kojim drugim Alat za testiranje API-ja više voliš.

Generički prikazi temeljeni na klasi olakšavaju vam rad

Kao što se vidi gore, generički pogledi temeljeni na klasi mogu ubrzati proces stvaranja pogleda. Sada samo trebate naslijediti pravi APIView za svoj slučaj upotrebe.

Također biste se trebali pobrinuti da usvojite dobre programerske prakse kako ne biste na kraju napisali loš kod.