Seuraa tätä vaiheittaista ohjetta, niin sinulla on CRUD-sovellusliittymän ydin, jota voit kehittää edelleen.

Django Rest Framework (DRF) on Django-kehys, joka tarjoaa tukea REST API: iden rakentamiseen. Kuten Django, DRF antaa sinun rakentaa API-näkymiä funktio- tai luokkapohjaisilla näkymillä.

Vaikka luokkapohjaisten näkymien kanssa voi olla aluksi vaikea työskennellä, ne tarjoavat etuja, kuten paremman koodirakenteen, uudelleenkäytettävyyden, periytymisen ja tiiviyden.

Luo Recipe Manager -sovellusliittymä Django REST Frameworkilla

Reseptienhallintasovellus on loistava tapa oppia luokkapohjaisista näkymistä DRF: ssä. Ominaisuudet, kuten reseptien lisääminen, poistaminen ja muokkaaminen, auttavat sinua ymmärtämään, kuinka CRUD (Create, Read, Update, Delete) -toimintoja toteutetaan. Seuraavat vaiheet opastavat sinua luomaan CRUD API: n.

Löydät tämän oppaan koodin osoitteesta GitHub.

Vaihe 1: Asenna Django REST Framework ja määritä projektisi

  1. Luo virtuaalinen ympäristö projektillesi ja asenna seuraavat riippuvuudet:
    pip install django djangorestframework
  2. instagram viewer
  3. Luo Django-projekti nimeltä ydin seuraavalla komennolla:
    django-admin startproject core .
  4. Luo sovellus nimeltä reseptin_hallinta:
    python manage.py startapp recipe_manager
  5. Avaa sinun core/settings.py tiedosto ja siirry kohtaan INSTALLED_APPS luettelo sovellusten rekisteröimiseksi:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

Vaihe 2: Luo malli reseptisovelluksellesi

  1. Avaa sinun recipe_manager/models.py tiedosto ja luo malli sovelluksellesi. Tässä on perusesimerkki reseptimallista:
    # models.py
    from django.db import models

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

  2. Luo siirrot ja siirrä mallisi tietokantaan tällä komennolla:
    python manage.py makemigrations && python manage.py migrate

Vaihe 3: Luo sarjoittaja sovelluksellesi

Serialisoija on Django-komponentti, jonka avulla voit muuntaa monimutkaisia ​​tietotyyppejä, kuten kyselyjoukkosi, muotoon, jonka voit hahmontaa, kuten JSON tai XML, ja päinvastoin.

Voit luoda serialisaattorin seuraavasti:

  1. Luo tiedosto nimeltä recipe_manager/serializers.py.
  2. Tuo serialisoijat moduuli sekä malli, jonka haluat sarjottaa:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. Luo samassa tiedostossa serialisointiluokka mallillesi ja määritä Meta luokka siinä:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    Tässä koodissa Meta luokka määrittää sarjotettavan mallin ja erityiset kentät, joita sarjoittajan tulee käsitellä. The kentät attribuutti voi olla joko luettelo tai monikko. Jos haluat sarjoittaa kaikki mallisi kentät, voit tehdä sen seuraavasti:
    classMeta:
    fields = "__all__"

Vaihe 4: Kirjoita näkymä CREATE-toiminnolle

Voit luoda luokkapohjaisia ​​näkymiä sovelluksellesi tuomalla Djangossa saatavilla olevan yleisen näkymän. Näistä näkymistä voit lukea osoitteesta Djangon viralliset asiakirjat. CRUD: n CREATE-toiminnon toteuttamiseksi sinun tulee tuoda Luo APIView. Sinun tulee myös tuoda serialisoija ja malli:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

CREATE-toiminnon toteuttamiseksi sinun tarvitsee vain määrittää sarjoittaja, jota näkymäsi tulee käyttää. Tässä on esimerkki:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

Tällä asetuksella voit tehdä POST-pyyntöjä sovelluksellesi.

Vaihe 5: Kirjoita näkymä READ-toiminnolle

  1. Ota READ-toiminto käyttöön tuomalla ListAPIView näkemyksiisi. Tämä näkymä auttaa sinua luetteloimaan malliobjektit:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Luo luokka näkymillesi ja määritä käytettävä serialisoija ja kyselyjoukko:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Luo näkymä tietyn reseptin lukemista varten. Tätä varten tarvitset RetrieveAPIView joten lisää se tuontiluetteloosi:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Luo seuraavaksi tarvitsemasi näkymä:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

Vaihe 6: Kirjoita näkymät UPDATE- ja DELETE-toimintoihin

Tarvitset UPDATE- ja DELETE-toimintojen toteuttamiseen Päivitä APIView ja DestroyAPIView vastaavasti, joten tuo ne:

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

Luo seuraavaksi näkymät aivan kuten aiemmin. Tällä kertaa näkemyksesi perii Päivitä APIView ja DestroyAPIView, vastaavasti:

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

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

Vaihe 7: Luo URL-osoitteet sovelluksellesi

  1. Lisää tämä koodi core/urls.py URL-osoitteiden määrittäminen:
    from django.urls import path, include

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

  2. Lisää seuraava koodi omaan recipe_manager/urls.py tiedosto:
    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'),
    ]

    Yllä olevasta koodista huomaat, että luokkapohjaiset näkymät käyttävät as_view() -toiminnolla luodakseen URL-mallinsa. Voit myös lukea aiheesta erot projektin ja sovelluksen välillä Djangossa jos olet hämmentynyt niiden käytöstä täällä.

Vaihe 8: Testaa API-päätepisteesi

Suorita projektihakemistostasi seuraava:

python manage.py runserver

Tämän pitäisi käynnistää palvelin, suorittaa joitakin tarkistuksia ja tulostaa URL-osoite, jonka kautta pääset siihen.

Voit nyt testata API-päätepisteitäsi siirtymällä vastaaviin URL-osoitteisiin (esim. /api/recipes/) ja lähettäminen HTTP-pyyntömenetelmät CRUD-operaatioita varten. Sinun pitäisi nähdä seuraavanlainen oletuskäyttöliittymä:

Selaimen käyttämisen sijaan voit tehdä sen testaa API: si Postmanilla.

DRY: n harjoitteleminen CRUD-sovellusliittymää luotaessa

DRY (Älä toista itseäsi) on a ohjelmointiperiaate, joka sinun tulee ottaa käyttöön parantaaksesi koodisi laatua.

Vaikka yllä kirjoitetut näkymät toimivat hyvin, voit välttää paljon toistoa käyttämällä ListCreateAPIView ja RetrieveUpdateDestroyAPIView yleisiä näkemyksiä.

ListCreateAPIView yhdistää ListAPIView ja Luo APIView, kun taas RetrieveUpdateDestroyAPIView yhdistää RetrieveAPIView, Päivitä APIView, ja DestroyAPIView.

Voit muokata aikaisempia näkymiäsi tältä:

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

Tämä lähestymistapa vähentää koodin kokonaismäärää.

Voit luoda URL-osoitteita uusille näkymille seuraavasti:

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

Voit testata näitä päätepisteitä Postmanilla tai millä tahansa API-testaustyökalu sinä suosit.

Yleiset luokkakohtaiset näkymät tekevät työstäsi helpompaa

Kuten yllä näkyy, yleiset luokkapohjaiset näkymät voivat nopeuttaa näkymien luontiprosessia. Nyt sinun tarvitsee vain periä käyttötapaukseesi sopiva APIView.

Sinun tulee myös varmistaa, että käytät hyviä ohjelmointikäytäntöjä, jotta et päädy kirjoittamaan huonoa koodia.