עקוב אחר מדריך זה שלב אחר שלב ותהיה לך הליבה של ממשק API של CRUD עליו תוכל לבנות עוד יותר.

Django Rest Framework (DRF) היא מסגרת Django המציעה תמיכה בבניית ממשקי API של REST. כמו Django, DRF מאפשר לך לבנות את תצוגות ה-API שלך עם תצוגות מבוססות פונקציות או מעמדות.

למרות שקשה לעבוד איתן תצוגות כיתה בהתחלה, הן מציעות יתרונות כמו מבנה קוד טוב יותר, שימוש חוזר, ירושה ותמציתיות.

צור ממשק API של מנהל מתכונים עם Django REST Framework

אפליקציית מנהל מתכונים היא דרך מצוינת ללמוד על תצוגות מבוססות כיתה ב-DRF. תכונות כגון הוספה, מחיקה ועריכה של מתכונים יעזרו לך להבין כיצד ליישם פעולות CRUD (צור, קריאה, עדכן, מחק). השלבים הבאים ילמדו אותך כיצד ליצור API של CRUD.

אתה יכול למצוא את הקוד למדריך זה ב- GitHub.

שלב 1: התקן את Django REST Framework והגדר את הפרויקט שלך

  1. צור סביבה וירטואלית עבור הפרויקט שלך והתקן את התלות הבאות:
    pip install django djangorestframework
  2. צור פרויקט ג'נגו בשם הליבה עם הפקודה הבאה:
    django-admin startproject core .
  3. צור אפליקציה בשם מנהל_מתכונים:
    python manage.py startapp recipe_manager
  4. פתח את
    instagram viewer
    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: צור סדרה עבור האפליקציה שלך

סריאלייזר הוא רכיב 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. באותו קובץ, צור מחלקת סדרה עבור הדגם שלך והגדר את מטא כיתה בו:
    # serializers.py
    classRecipeSerializer(serializers.ModelSerializer):
    classMeta:
    model = Recipe
    fields = ('recipe_name', 'ingredients', 'instructions')
    בקוד זה, ה מטא class מגדיר את המודל להסדרה ואת השדות הספציפיים שהמסדרה צריך לטפל בהם. ה שדות התכונה יכולה להיות רשימה או tuple. אם אתה רוצה לעשות סדרה של כל השדות בדגם שלך, אתה יכול לעשות זאת כך:
    classMeta:
    fields = "__all__"

שלב 4: כתוב תצוגה עבור פעולת CREATE

אתה יכול ליצור תצוגות מבוססות כיתה עבור האפליקציה שלך על ידי ייבוא ​​התצוגה הגנרית הזמינה ב-Django. אתה יכול לקרוא על דעות אלה מ התיעוד הרשמי של ג'נגו. כדי ליישם את פעולת CREATE של CRUD, עליך לייבא את צור APIView. עליך לייבא גם את הסדרה והדגם שלך:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

כדי ליישם את פעולת ה-CREATE, אתה רק צריך לציין את ה-serializer שלך צריך להשתמש בתצוגה. הנה דוגמה:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

עם הגדרה זו, אתה יכול לשלוח בקשות POST לאפליקציה שלך.

שלב 5: כתוב תצוגה עבור פעולת הקריאה

  1. כדי ליישם את פעולת READ, ייבא את ה ListAPIView לדעות שלך. תצוגה זו עוזרת לך לרשום אובייקטי מודל:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
  2. צור מחלקה לתצוגות שלך וציין את ערכת הסדרות וערכת השאילתות לשימוש:
    # List view
    classRecipeListView(ListAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
  3. צור תצוגה לקריאת מתכון ספציפי. כדי לעשות זאת, אתה צריך את אחזר APIView אז הוסף אותו לרשימת הייבוא ​​שלך:
    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    לאחר מכן, צור את התצוגה שאתה צריך:
    # Retrieve view
    classRecipeRetrieveView(RetrieveAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

שלב 6: כתוב תצוגות עבור פעולות העדכון והמחיקה

כדי ליישם את פעולות העדכון והמחיקה, אתה צריך את UpdateAPIView ו הרס APIView בהתאמה, אז ייבא אותם:

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

לאחר מכן, צור את התצוגות, בדיוק כפי שעשית בעבר. הפעם, הדעות שלך יירשו מה- UpdateAPIView ו הרס APIView, בהתאמה:

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

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

שלב 7: צור כתובות אתרים עבור האפליקציה שלך

  1. הוסף את הקוד הזה ל core/urls.py כדי להגדיר את כתובות האתרים שלך:
    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() פונקציה ליצירת דפוסי כתובת האתר שלהם. אתה יכול גם לקרוא על הבדלים בין פרויקט לאפליקציה ב-Django אם אתה מבולבל מהשימוש שלהם כאן.

שלב 8: בדוק את נקודות הקצה שלך ב-API

מספריית הפרויקט שלך, הפעל את הפעולות הבאות:

python manage.py runserver

זה אמור להפעיל את השרת שלך, לבצע כמה בדיקות ולהדפיס כתובת אתר שתוכל לגשת אליה באמצעותה.

כעת תוכל לבדוק את נקודות הקצה של ה-API שלך על ידי ניווט לכתובות ה-URL המתאימות (לדוגמה, /api/recipes/) ושליחה שיטות בקשת HTTP עבור פעולות CRUD. אתה אמור לראות ממשק ברירת מחדל כזה:

במקום להשתמש בדפדפן שלך, אתה יכול בדוק את ה-API שלך עם Postman.

תרגול DRY תוך יצירת API של CRUD

DRY (אל תחזור על עצמך) הוא א עיקרון תכנות שאתה צריך לאמץ כדי לשפר את איכות הקוד שלך.

למרות שההשקפות שנכתבו לעיל עובדות היטב, אתה יכול להימנע מהרבה חזרות על ידי שימוש ב- ListCreateAPIView וה אחזרUpdateDestroyAPIView דעות גנריות.

ListCreateAPIView משלב את ListAPIView ו צור APIView, בעוד ה-RetrieveUpdateDestroyAPIView משלב את אחזר APIView, UpdateAPIView, וה הרס APIView.

אתה יכול לשנות את התצוגות הקודמות שלך כך שייראו כך:

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

גישה זו מפחיתה את כמות הקוד הכוללת.

אתה יכול ליצור כתובות אתרים עבור התצוגות החדשות כך:

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 המתאים למקרה השימוש שלך.

אתה צריך גם לוודא שאתה לאמץ שיטות תכנות טובות, כדי שלא תגמור לכתוב קוד גרוע.