Vykdykite šį nuoseklų vadovą ir turėsite CRUD API pagrindą, kurį galėsite kurti toliau.

„Django Rest Framework“ (DRF) yra „Django“ sistema, teikianti paramą kuriant REST API. Kaip ir „Django“, DRF leidžia kurti API rodinius naudojant funkcijomis arba klasėmis pagrįstus rodinius.

Nors iš pradžių gali būti sunku dirbti su klasės rodiniais, jie siūlo geresnę kodo struktūrą, pakartotinį naudojimą, paveldimumą ir glaustumą.

Sukurkite receptų tvarkyklės API naudodami „Django REST Framework“.

Receptų tvarkytuvės programa yra puikus būdas sužinoti apie klasės rodinius DRF. Tokios funkcijos kaip receptų pridėjimas, trynimas ir redagavimas padės suprasti, kaip įgyvendinti CRUD (Create, Read, Update, Delete) operacijas. Šie veiksmai išmokys jus sukurti CRUD API.

Šio vadovo kodą galite rasti adresu GitHub.

1 veiksmas: įdiekite „Django REST Framework“ ir sukonfigūruokite projektą

  1. Sukurkite virtualią savo projekto aplinką ir įdiekite šias priklausomybes:
    pip install django djangorestframework
  2. Sukurkite Django projektą pavadinimu šerdis su tokia komanda:
    django-admin startproject core .
  3. instagram viewer
  4. Sukurkite programą pavadinimu receptų_vadybininkas:
    python manage.py startapp recipe_manager
  5. Atidaryk savo core/settings.py failą ir eikite į INSTALLED_APPS programų registravimo sąrašas:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

2 veiksmas: sukurkite savo receptų programos modelį

  1. Atidaryk savo receptas_manager/models.py failą ir sukurkite savo programos modelį. Štai pagrindinis recepto modelio pavyzdys:
    # models.py
    from django.db import models

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

  2. Sukurkite perkėlimą ir perkelkite modelį į duomenų bazę naudodami šią komandą:
    python manage.py makemigrations && python manage.py migrate

3 veiksmas: sukurkite savo programos serializatorių

Serializatorius yra „Django“ komponentas, padedantis konvertuoti sudėtingus duomenų tipus, pvz., užklausų rinkinį, į formatą, kurį galite pateikti, pvz., JSON arba XML, ir atvirkščiai.

Norėdami sukurti serializatorių, atlikite šiuos veiksmus:

  1. Sukurkite failą pavadinimu receptas_manager/serializers.py.
  2. Importuoti serializatoriai modulis, taip pat modelis, kurį norite serializuoti:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. Tame pačiame faile sukurkite modelio serializavimo klasę ir apibrėžkite Meta klasė joje:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    Šiame kode, Meta klasė apibrėžia serializavimo modelį ir konkrečius laukus, kuriuos serializatorius turėtų tvarkyti. The laukai atributas gali būti sąrašas arba eilė. Jei norite suskirstyti visus modelio laukus, galite tai padaryti taip:
    classMeta:
    fields = "__all__"

4 veiksmas: parašykite operacijos CREATE vaizdą

Galite sukurti savo programos rodinius pagal klases, importuodami bendrąjį rodinį, pasiekiamą „Django“. Apie šias nuomones galite perskaityti iš Django oficialūs dokumentai. Norėdami įgyvendinti CRUD operaciją CREATE, turėtumėte importuoti Sukurti APIView. Taip pat turėtumėte importuoti serializatorių ir modelį:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Norint įgyvendinti operaciją CREATE, tereikia nurodyti serializatorių, kurį turėtų naudoti jūsų rodinys. Štai pavyzdys:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

Naudodami šią sąranką galite pateikti programai POST užklausas.

5 veiksmas: parašykite SKAITYTI operacijos vaizdą

  1. Norėdami įgyvendinti operaciją READ, importuokite ListAPIView į savo pažiūras. Šis rodinys padeda išvardinti modelio objektus:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Sukurkite savo rodinių klasę ir nurodykite naudotiną serializatorių ir užklausų rinkinį:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Norėdami perskaityti konkretų receptą, sukurkite rodinį. Norėdami tai padaryti, jums reikia RetrieveAPIView todėl įtraukite jį į savo importuojamų prekių sąrašą:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Tada sukurkite reikiamą rodinį:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

6 veiksmas: parašykite UPDATE ir DELETE operacijų rodinius

Norint įgyvendinti UPDATE ir DELETE operacijas, reikia Atnaujinkite APIView ir DestroyAPIView atitinkamai importuokite juos:

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

Tada sukurkite rodinius, kaip darėte anksčiau. Šį kartą jūsų pažiūros bus paveldėtos iš Atnaujinkite APIView ir DestroyAPIView, atitinkamai:

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

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

7 veiksmas: sukurkite savo programos URL adresus

  1. Pridėkite šį kodą prie core/urls.py norėdami sukonfigūruoti savo URL:
    from django.urls import path, include

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

  2. Pridėkite šį kodą prie savo receptų_vadovas/urls.py failas:
    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'),
    ]

    Iš pirmiau pateikto kodo pastebėsite, kad klasių rodiniuose naudojamas as_view() funkcija sukurti savo URL šablonus. Taip pat galite perskaityti apie skirtumai tarp projekto ir programos Django jei jus glumina jų naudojimas čia.

8 veiksmas: išbandykite savo API galutinius taškus

Iš savo projekto katalogo paleiskite šiuos veiksmus:

python manage.py runserver

Tai turėtų paleisti serverį, atlikti tam tikrus patikrinimus ir išspausdinti URL, kuriuo galite jį pasiekti.

Dabar galite išbandyti savo API galinius taškus eidami į atitinkamus URL (pvz., /api/recipes/) ir siuntimas HTTP užklausos metodai CRUD operacijoms. Turėtumėte pamatyti tokią numatytąją sąsają:

Užuot naudoję naršyklę, galite išbandykite savo API naudodami „Postman“..

DRY praktika kuriant CRUD API

DRY (Nekartokite savęs) yra a programavimo principą, kurį turėtumėte laikytis kad pagerintumėte savo kodo kokybę.

Nors aukščiau parašyti vaizdai veikia gerai, galite išvengti daug pasikartojimų naudodami ListCreateAPIView ir RetrieveUpdateDestroyAPIView bendri požiūriai.

ListCreateAPIView sujungia ListAPIView ir Sukurti APIView, o RetrieveUpdateDestroyAPIView sujungia RetrieveAPIView, Atnaujinkite APIView, ir DestroyAPIView.

Galite pakeisti ankstesnius rodinius, kad atrodytų taip:

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

Šis metodas sumažina bendrą kodo kiekį.

Naujų rodinių URL galite sukurti taip:

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

Šiuos galutinius taškus galite išbandyti naudodami „Postman“ arba bet kurį kitą API testavimo įrankis jums labiau patinka.

Bendrieji klasėmis pagrįsti vaizdai palengvina jūsų darbą

Kaip matyti aukščiau, bendrieji klasėmis pagrįsti rodiniai gali pagreitinti rodinių kūrimo procesą. Dabar jums tereikia paveldėti tinkamą APIView jūsų naudojimo atvejui.

Taip pat turėtumėte įsitikinti, kad taikote gerą programavimo praktiką, kad nereikėtų rašyti blogo kodo.