اتبع هذا الدليل المفصّل خطوة بخطوة وسيكون لديك جوهر واجهة برمجة تطبيقات CRUD التي يمكنك البناء عليها بشكل أكبر.

Django Rest Framework (DRF) هو إطار عمل Django الذي يقدم الدعم لبناء واجهات برمجة تطبيقات REST. مثل Django، يتيح لك DRF إنشاء عروض واجهة برمجة التطبيقات (API) الخاصة بك باستخدام طرق العرض القائمة على الوظيفة أو القائمة على الفئة.

على الرغم من صعوبة العمل مع طرق العرض المستندة إلى الفصل في البداية، إلا أنها توفر فوائد مثل بنية أفضل للتعليمات البرمجية وإمكانية إعادة الاستخدام والوراثة والإيجاز.

قم بإنشاء واجهة برمجة تطبيقات إدارة الوصفات باستخدام Django REST Framework

يعد تطبيق مدير الوصفات طريقة رائعة للتعرف على طرق العرض المستندة إلى الفصل في DRF. ستساعدك ميزات مثل إضافة الوصفات وحذفها وتحريرها على فهم كيفية تنفيذ عمليات CRUD (الإنشاء والقراءة والتحديث والحذف). ستعلمك الخطوات التالية كيفية إنشاء واجهة برمجة تطبيقات CRUD.

يمكنك العثور على رمز هذا الدليل على جيثب.

الخطوة 1: تثبيت إطار عمل Django REST وتكوين مشروعك

  1. أنشئ بيئة افتراضية لمشروعك وقم بتثبيت التبعيات التالية:
    pip install django djangorestframework
  2. instagram viewer
  3. قم بإنشاء مشروع Django يسمى جوهر بالأمر التالي:
    django-admin startproject core .
  4. قم بإنشاء تطبيق يسمى description.recipe_manager:
    python manage.py startapp recipe_manager
  5. افتح الأساسية/الإعدادات.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. قم بإنشاء ملف يسمى وصفة_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')
    في هذا الكود، ميتا تحدد الفئة النموذج المطلوب إجراء تسلسل له والحقول المحددة التي يجب أن يتعامل معها المُسلسِل. ال مجالات يمكن أن تكون السمة إما قائمة أو صفًا. إذا كنت تريد إجراء تسلسل لجميع الحقول في النموذج الخاص بك، فيمكنك القيام بذلك على النحو التالي:
    classMeta:
    fields = "__all__"

الخطوة 4: اكتب عرضًا لعملية الإنشاء

يمكنك إنشاء طرق عرض قائمة على الفصل لتطبيقك عن طريق استيراد العرض العام المتوفر في Django. يمكنك أن تقرأ عن هذه الآراء من وثائق جانغو الرسمية. لتنفيذ عملية CREATE لـ CRUD، يجب عليك استيراد ملف إنشاء APIView. يجب عليك أيضًا استيراد المُسلسل والطراز الخاص بك:

# views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

لتنفيذ عملية الإنشاء، ما عليك سوى تحديد المُسلسِل الذي يجب أن يستخدمه العرض الخاص بك. هنا مثال:

# Create view
classRecipeCreateView(CreateAPIView):
serializer_class = RecipeSerializer

باستخدام هذا الإعداد، يمكنك إجراء طلبات POST لتطبيقك.

الخطوة 5: اكتب عرضًا لعملية القراءة

  1. لتنفيذ عملية القراءة، قم باستيراد ملف 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: كتابة طرق العرض لعمليات التحديث والحذف

لتنفيذ عمليتي التحديث والحذف، تحتاج إلى تحديثAPIView و تدمير APIView على التوالي، لذا قم باستيرادها:

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

بعد ذلك، قم بإنشاء طرق العرض، تمامًا كما فعلت من قبل. هذه المرة، سوف ترث وجهات نظركم من تحديثAPIView و تدمير APIView، على التوالى:

# 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. أضف هذا الكود إلى الأساسية/urls.py لتكوين عناوين URL الخاصة بك:
    from django.urls import path, include

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

  2. أضف الكود التالي إلى وصفة_مدير/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 الخاصة بهم. يمكنك أيضًا أن تقرأ عن الاختلافات بين المشروع والتطبيق في جانغو إذا كنت مرتبكًا من استخدامها هنا.

الخطوة 8: اختبار نقاط نهاية API الخاصة بك

من دليل المشروع الخاص بك، قم بتشغيل ما يلي:

python manage.py runserver

من المفترض أن يؤدي ذلك إلى تشغيل الخادم الخاص بك وإجراء بعض الفحوصات وطباعة عنوان URL الذي يمكنك الوصول إليه عبره.

يمكنك الآن اختبار نقاط نهاية واجهة برمجة التطبيقات الخاصة بك عن طريق الانتقال إلى عناوين URL المعنية (على سبيل المثال، /api/recipes/) وإرسال طرق طلب HTTP لعمليات CRUD. يجب أن تشاهد الواجهة الافتراضية مثل هذا:

بدلاً من استخدام المتصفح الخاص بك، يمكنك ذلك اختبر واجهة برمجة التطبيقات (API) الخاصة بك مع Postman.

التدرب على الجفاف أثناء إنشاء واجهة برمجة تطبيقات CRUD

جاف (لا تكرر نفسك) هو أ مبدأ البرمجة الذي يجب أن تعتمده لتحسين جودة التعليمات البرمجية الخاصة بك.

على الرغم من أن طرق العرض المكتوبة أعلاه تعمل بشكل جيد، إلا أنه يمكنك تجنب الكثير من التكرار باستخدام ListCreateAPIView و ال استرداد التحديث، تدمير APIView وجهات نظر عامة.

يجمع ListCreateAPIView بين ListAPIView و إنشاء APIView، بينما يجمع RetrieveUpdateDestroyAPIView بين استرداد APIView, تحديثAPIView، و ال تدمير 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()

هذا الأسلوب يقلل من المبلغ الإجمالي للتعليمات البرمجية.

يمكنك إنشاء عناوين 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 أو أي منها أداة اختبار واجهة برمجة التطبيقات انت تفضل.

طرق العرض العامة المستندة إلى الفصل تجعل عملك أسهل

كما رأينا أعلاه، يمكن لطرق العرض العامة المستندة إلى الفصل تسريع عملية إنشاء طرق العرض. الآن ما عليك سوى وراثة APIView المناسب لحالة الاستخدام الخاصة بك.

يجب عليك أيضًا التأكد من اعتماد ممارسات البرمجة الجيدة، حتى لا ينتهي بك الأمر إلى كتابة تعليمات برمجية سيئة.