Ακολουθήστε αυτόν τον οδηγό βήμα προς βήμα και θα έχετε τον πυρήνα ενός CRUD API πάνω στο οποίο μπορείτε να αναπτύξετε περαιτέρω.

Το Django Rest Framework (DRF) είναι ένα πλαίσιο Django που προσφέρει υποστήριξη για τη δημιουργία REST API. Όπως και το Django, το DRF σάς επιτρέπει να δημιουργήσετε τις προβολές API σας με προβολές βασισμένες σε λειτουργίες ή προβολές βάσει κλάσεων.

Παρόλο που οι προβολές που βασίζονται σε τάξη μπορεί να είναι δύσκολο να εργαστούν στην αρχή, προσφέρουν πλεονεκτήματα όπως καλύτερη δομή κώδικα, επαναχρησιμοποίηση, κληρονομικότητα και συνοπτικότητα.

Δημιουργήστε ένα API Διαχείρισης συνταγών με το Django REST Framework

Μια εφαρμογή διαχείρισης συνταγών είναι ένας πολύ καλός τρόπος για να μάθετε για τις προβολές βάσει τάξης στο DRF. Λειτουργίες όπως η προσθήκη, η διαγραφή και η επεξεργασία συνταγών θα σας βοηθήσουν να κατανοήσετε πώς να εφαρμόσετε λειτουργίες CRUD (Δημιουργία, Ανάγνωση, Ενημέρωση, Διαγραφή). Τα παρακάτω βήματα θα σας διδάξουν πώς να δημιουργήσετε ένα CRUD API.

instagram viewer

Μπορείτε να βρείτε τον κωδικό για αυτόν τον οδηγό στο GitHub.

Βήμα 1: Εγκαταστήστε το Django REST Framework και διαμορφώστε το έργο σας

  1. Δημιουργήστε ένα εικονικό περιβάλλον για το έργο σας και εγκαταστήστε τις ακόλουθες εξαρτήσεις:
    pip install django djangorestframework
  2. Δημιουργήστε ένα έργο Django που ονομάζεται πυρήνας με την ακόλουθη εντολή:
    django-admin startproject core .
  3. Δημιουργήστε μια εφαρμογή που ονομάζεται συνταγή_διαχειριστής:
    python manage.py startapp recipe_manager
  4. Ανοιξε το δικό σου core/settings.py αρχείο και μεταβείτε στο INSTALLED_APPS λίστα για να καταχωρήσετε τις εφαρμογές σας:
    INSTALLED_APPS = [
    # custom apps
    'rest_framework',
    'recipe_manager',
    ]

Βήμα 2: Δημιουργήστε ένα μοντέλο για την εφαρμογή συνταγής σας

  1. Ανοιξε το δικό σου recipe_manager/models.py αρχείο και δημιουργήστε ένα μοντέλο για την εφαρμογή σας. Ακολουθεί ένα βασικό παράδειγμα ενός μοντέλου συνταγής:
    # models.py
    from django.db import models

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

  2. Δημιουργήστε μετεγκαταστάσεις και μετεγκαταστήστε το μοντέλο σας στη βάση δεδομένων με αυτήν την εντολή:
    python manage.py makemigrations && python manage.py migrate

Βήμα 3: Δημιουργήστε ένα Serializer για την εφαρμογή σας

Ο σειριοποιητής είναι ένα στοιχείο Django που σας βοηθά να μετατρέψετε σύνθετους τύπους δεδομένων, όπως το σύνολο ερωτημάτων σας, σε μια μορφή που μπορείτε να αποδώσετε, όπως JSON ή XML, και αντίστροφα.

Για να δημιουργήσετε έναν σειριακό, ακολουθήστε τα εξής βήματα:

  1. Δημιουργήστε ένα αρχείο που ονομάζεται recipe_manager/serializers.py.
  2. Εισαγάγετε το σειριακούς ενότητα καθώς και το μοντέλο που θέλετε να σειριοποιήσετε:
    # serializers.py
    from rest_framework import serializers

    from .models import Recipe # the model to serialize

  3. Στο ίδιο αρχείο, δημιουργήστε μια κλάση serializer για το μοντέλο σας και ορίστε το Μετα τάξη σε αυτό:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    Σε αυτόν τον κώδικα, το Μετα Η κλάση ορίζει το μοντέλο προς σειριοποίηση και τα συγκεκριμένα πεδία που πρέπει να χειριστεί ο σειριοποιητής. ο χωράφια Το χαρακτηριστικό μπορεί να είναι είτε λίστα είτε πλειάδα. Εάν θέλετε να σειριοποιήσετε όλα τα πεδία στο μοντέλο σας, μπορείτε να το κάνετε ως εξής:
    classMeta:
    fields = "__all__"

Βήμα 4: Γράψτε μια προβολή για τη λειτουργία CREATE

Μπορείτε να δημιουργήσετε προβολές βάσει κλάσεων για την εφαρμογή σας εισάγοντας τη γενική προβολή που είναι διαθέσιμη στο Django. Μπορείτε να διαβάσετε για αυτές τις απόψεις από Επίσημη τεκμηρίωση του Django. Για να εφαρμόσετε τη λειτουργία CREATE του CRUD, θα πρέπει να εισαγάγετε το CreateAPIVview. Θα πρέπει επίσης να εισαγάγετε το σειριακό πρόγραμμα και το μοντέλο σας:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

Για να εφαρμόσετε τη λειτουργία CREATE, χρειάζεται μόνο να καθορίσετε τον σειριοποιητή που θα χρησιμοποιεί η προβολή σας. Εδώ είναι ένα παράδειγμα:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

Με αυτήν τη ρύθμιση, μπορείτε να κάνετε αιτήματα POST στην εφαρμογή σας.

Βήμα 5: Γράψτε μια προβολή για τη λειτουργία READ

  1. Για να εφαρμόσετε τη λειτουργία READ, εισαγάγετε το ListAPIVπροβολή στις απόψεις σας. Αυτή η προβολή σάς βοηθά να απαριθμήσετε τα αντικείμενα του μοντέλου:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. Δημιουργήστε μια τάξη για τις προβολές σας και καθορίστε το σειριακό πρόγραμμα και το σύνολο ερωτημάτων που θα χρησιμοποιηθούν:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. Δημιουργήστε μια προβολή για να διαβάσετε μια συγκεκριμένη συνταγή. Για να το κάνετε αυτό, χρειάζεστε το ΑνάκτησηAPIVπροβολή οπότε προσθέστε το στη λίστα εισαγωγών σας:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    Στη συνέχεια, δημιουργήστε την προβολή που χρειάζεστε:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

Βήμα 6: Γράψτε προβολές για τις λειτουργίες ΕΝΗΜΕΡΩΣΗ και ΔΙΑΓΡΑΦΗ

Για να εφαρμόσετε τις λειτουργίες UPDATE και DELETE, χρειάζεστε το UpdateAPIVview και DestroyAPIVView αντίστοιχα, εισάγετέ τα:

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

Στη συνέχεια, δημιουργήστε τις προβολές, όπως κάνατε πριν. Αυτή τη φορά, οι απόψεις σας θα κληρονομηθούν από το UpdateAPIVview και DestroyAPIVView, αντίστοιχα:

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

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

Βήμα 7: Δημιουργήστε διευθύνσεις URL για την εφαρμογή σας

  1. Προσθέστε αυτόν τον κωδικό σε core/urls.py για να διαμορφώσετε τις διευθύνσεις URL σας:
    from django.urls import path, include

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

  2. Προσθέστε τον παρακάτω κώδικα στο δικό σας recipe_manager/urls.py αρχείο:
    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'),
    ]

    Από τον παραπάνω κώδικα, θα παρατηρήσετε ότι οι προβολές που βασίζονται σε κλάσεις χρησιμοποιούν το as_view() λειτουργούν για τη δημιουργία των μοτίβων URL τους. Μπορείτε επίσης να διαβάσετε για το διαφορές μεταξύ ενός έργου και μιας εφαρμογής στο Django αν σας μπερδεύει η χρήση τους εδώ.

Βήμα 8: Δοκιμάστε τα τελικά σημεία του API σας

Από τον κατάλογο του έργου σας, εκτελέστε τα εξής:

python manage.py runserver

Αυτό θα πρέπει να ξεκινήσει τον διακομιστή σας, να εκτελέσει μερικούς ελέγχους και να εκτυπώσει μια διεύθυνση URL μέσω της οποίας μπορείτε να έχετε πρόσβαση.

Μπορείτε πλέον να δοκιμάσετε τα τελικά σημεία του API σας μεταβαίνοντας στις αντίστοιχες διευθύνσεις URL (π.χ. /api/recipes/) και αποστολή Μέθοδοι αιτήματος HTTP για πράξεις CRUD. Θα πρέπει να δείτε μια προεπιλεγμένη διεπαφή όπως αυτή:

Αντί να χρησιμοποιείτε το πρόγραμμα περιήγησής σας, μπορείτε δοκιμάστε το API σας με τον Postman.

Εξάσκηση στο DRY κατά τη δημιουργία ενός CRUD API

DRY (Don't Repeat Yourself) είναι α αρχή προγραμματισμού που πρέπει να υιοθετήσετε για να βελτιώσετε την ποιότητα του κώδικά σας.

Αν και οι προβολές που γράφτηκαν παραπάνω λειτουργούν καλά, μπορείτε να αποφύγετε πολλές επαναλήψεις χρησιμοποιώντας το ListCreateAPIVview και το RetrieveUpdateDestroyAPIView γενικές απόψεις.

Το ListCreateAPIView συνδυάζει το ListAPIVπροβολή και CreateAPIVview, ενώ το RetrieveUpdateDestroyAPIView συνδυάζει το ΑνάκτησηAPIVπροβολή, UpdateAPIVview, και το DestroyAPIVView.

Μπορείτε να τροποποιήσετε τις προηγούμενες προβολές σας ώστε να μοιάζουν με αυτό:

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

Αυτή η προσέγγιση μειώνει τη συνολική ποσότητα κώδικα.

Μπορείτε να δημιουργήσετε διευθύνσεις URL για τις νέες προβολές ως εξής:

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

Μπορείτε να δοκιμάσετε αυτά τα τελικά σημεία με τον Postman ή οποιοδήποτε άλλο Εργαλείο δοκιμής API προτιμάς.

Οι γενικές προβολές που βασίζονται στην τάξη κάνουν την εργασία σας πιο εύκολη

Όπως φαίνεται παραπάνω, οι γενικές προβολές που βασίζονται σε κλάσεις μπορούν να επιταχύνουν τη διαδικασία δημιουργίας προβολών. Τώρα χρειάζεται μόνο να κληρονομήσετε το σωστό APIView για την περίπτωση χρήσης σας.

Θα πρέπει επίσης να διασφαλίσετε ότι υιοθετείτε καλές πρακτικές προγραμματισμού, ώστε να μην καταλήξετε να γράφετε κακό κώδικα.