Sledite temu vodniku po korakih in imeli boste jedro API-ja CRUD, na katerem lahko gradite naprej.

Django Rest Framework (DRF) je ogrodje Django, ki ponuja podporo za gradnjo API-jev REST. Podobno kot Django vam DRF omogoča ustvarjanje pogledov API s pogledi, ki temeljijo na funkcijah ali razredih.

Čeprav je na začetku težko delati s pogledi, ki temeljijo na razredih, ponujajo prednosti, kot so boljša struktura kode, možnost ponovne uporabe, dedovanje in jedrnatost.

Ustvarite API za upravljanje receptov z ogrodjem Django REST

Aplikacija za upravljanje receptov je odličen način za spoznavanje pogledov, ki temeljijo na razredih, v DRF. Funkcije, kot so dodajanje, brisanje in urejanje receptov, vam bodo pomagale razumeti, kako izvajati operacije CRUD (ustvari, preberi, posodobi, izbriši). Naslednji koraki vas bodo naučili, kako ustvariti CRUD API.

Kodo za ta vodnik najdete na GitHub.

1. korak: Namestite ogrodje Django REST in konfigurirajte svoj projekt

  1. Ustvarite virtualno okolje za svoj projekt in namestite naslednje odvisnosti:
    pip install django djangorestframework
  2. Ustvarite projekt Django, imenovan jedro z naslednjim ukazom:
    django-admin startproject core .
  3. Ustvarite aplikacijo, imenovano upravitelj_receptov:
    python manage.py startapp recipe_manager
  4. Odpri svojo core/settings.py datoteko in se pomaknite do INSTALLED_APPS seznam za registracijo vaših aplikacij:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

2. korak: Ustvarite model za vašo aplikacijo receptov

  1. Odpri svojo recipe_manager/models.py datoteko in ustvarite model za svojo aplikacijo. Tukaj je osnovni primer 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. Ustvarite migracije in preselite svoj model v bazo podatkov s tem ukazom:
    python manage.py makemigrations && python manage.py migrate

3. korak: ustvarite serializator za svojo aplikacijo

Serializator je komponenta Django, ki vam pomaga pretvoriti zapletene tipe podatkov, kot je vaš niz poizvedb, v obliko, ki jo lahko upodabljate, kot je JSON ali XML, in obratno.

Če želite ustvariti serializator, sledite tem korakom:

  1. Ustvari datoteko z imenom recipe_manager/serializers.py.
  2. Uvozite serializatorji modul in model, ki ga želite serializirati:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. V isti datoteki ustvarite razred serializatorja za svoj model in definirajte Meta razred v njem:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    V tej kodi je Meta razred definira model za serializacijo in specifična polja, ki jih mora obravnavati serializator. The polja atribut je lahko bodisi seznam ali tuple. Če želite serializirati vsa polja v vašem modelu, lahko to storite takole:
    classMeta:
    fields = "__all__"

4. korak: Napišite pogled za operacijo CREATE

Za svojo aplikacijo lahko ustvarite poglede, ki temeljijo na razredih, tako da uvozite splošni pogled, ki je na voljo v Djangu. O teh pogledih lahko preberete na Uradna dokumentacija Django. Če želite izvesti operacijo CREATE za CRUD, morate uvoziti CreateAPIView. Prav tako morate uvoziti svoj serializator in model:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Za izvedbo operacije CREATE morate le podati serializator, ki naj ga vaš pogled uporablja. Tukaj je primer:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

S to nastavitvijo lahko svoji aplikaciji pošiljate zahteve POST.

5. korak: Napišite pogled za operacijo READ

  1. Če želite izvesti operacijo READ, uvozite ListAPIView na vaše poglede. Ta pogled vam pomaga našteti predmete modela:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Ustvarite razred za svoje poglede in določite serializator in nabor poizvedb za uporabo:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Ustvarite pogled za branje določenega recepta. Če želite to narediti, potrebujete RetrieveAPIView zato ga dodajte na seznam uvozov:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Nato ustvarite pogled, ki ga potrebujete:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

6. korak: Zapišite poglede za operaciji UPDATE in DELETE

Za izvedbo operacij UPDATE in DELETE potrebujete UpdateAPIView in DestroyAPIView zato jih uvozite:

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

Nato ustvarite poglede, tako kot ste to storili prej. Tokrat bodo vaši pogledi podedovali od UpdateAPIView in DestroyAPIViewoziroma:

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

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

7. korak: Ustvarite URL-je za svojo aplikacijo

  1. Dodajte to kodo v core/urls.py za konfiguracijo URL-jev:
    from django.urls import path, include

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

  2. Svoji dodajte naslednjo kodo recipe_manager/urls.py mapa:
    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 zgornje kode boste opazili, da razredni pogledi uporabljajo as_view() funkcijo za ustvarjanje vzorcev URL-jev. Preberete lahko tudi o razlike med projektom in aplikacijo v Djangu če ste zmedeni zaradi njihove uporabe tukaj.

8. korak: preizkusite končne točke API-ja

Iz imenika vašega projekta zaženite naslednje:

python manage.py runserver

To bi moralo zagnati vaš strežnik, izvesti nekaj preverjanj in natisniti URL, prek katerega lahko dostopate do njega.

Zdaj lahko preizkusite svoje končne točke API tako, da se pomaknete na ustrezne URL-je (npr. /api/recipes/) in pošiljanje Metode zahtev HTTP za operacije CRUD. Morali bi videti privzeti vmesnik, kot je ta:

Namesto brskalnika lahko preizkusite svoj API s programom Postman.

Vadba DRY med ustvarjanjem API-ja CRUD

DRY (Ne ponavljaj se) je a načelo programiranja, ki bi ga morali sprejeti za izboljšanje kakovosti vaše kode.

Čeprav zgoraj napisani pogledi dobro delujejo, se lahko izognete pogostemu ponavljanju z uporabo ListCreateAPIView in RetrieveUpdateDestroyAPIView generični pogledi.

ListCreateAPIView združuje ListAPIView in CreateAPIView, medtem ko RetrieveUpdateDestroyAPIView združuje RetrieveAPIView, UpdateAPIView, in DestroyAPIView.

Svoje prejšnje poglede lahko spremenite tako, da bodo videti takole:

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

Ta pristop zmanjša celotno količino kode.

URL-je za nove poglede lahko ustvarite takole:

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

Te končne točke lahko preizkusite s programom Postman ali katerim koli drugim Orodje za testiranje API vam je ljubše.

Generični pogledi, ki temeljijo na razredih, vam olajšajo delo

Kot je razvidno zgoraj, lahko generični pogledi, ki temeljijo na razredih, pospešijo proces ustvarjanja pogledov. Zdaj morate samo podedovati pravi APIView za vaš primer uporabe.

Prav tako morate zagotoviti, da sprejmete dobre programerske prakse, da ne boste pisali slabe kode.