Django REST Framework-ում ստեղծեք CRUD REST API՝ դասի վրա հիմնված դիտումներով


Հետևեք այս քայլ առ քայլ ուղեցույցին, և դուք կունենաք CRUD API-ի առանցքը, որի վրա կարող եք կառուցել հետագա:

Django Rest Framework-ը (DRF) Django-ի շրջանակ է, որն առաջարկում է աջակցություն REST API-ներ ստեղծելու համար: Django-ի պես, DRF-ը թույլ է տալիս ստեղծել ձեր API-ի դիտումները ֆունկցիայի վրա հիմնված կամ դասակարգի վրա հիմնված դիտումներով:

Չնայած դասի վրա հիմնված դիտումների հետ սկզբում դժվար է աշխատել, դրանք առաջարկում են առավելություններ, ինչպիսիք են կոդի ավելի լավ կառուցվածքը, կրկնակի օգտագործման հնարավորությունը, ժառանգականությունը և հակիրճությունը:

Ստեղծեք Recipe Manager API Django REST Framework-ով

Բաղադրատոմսերի կառավարիչ հավելվածը հիանալի միջոց է սովորելու DRF-ում դասի վրա հիմնված դիտումների մասին: Հատկություններ, ինչպիսիք են բաղադրատոմսերի ավելացումը, ջնջումը և խմբագրումը, կօգնեն ձեզ հասկանալ, թե ինչպես իրականացնել CRUD (Ստեղծել, կարդալ, թարմացնել, ջնջել) գործողությունները: Հետևյալ քայլերը կսովորեցնեն ձեզ, թե ինչպես ստեղծել CRUD API:

Այս ուղեցույցի կոդը կարող եք գտնել GitHub-ում:

Քայլ 1. Տեղադրեք Django REST Framework-ը և կարգավորեք ձեր նախագիծը

  1. Ստեղծեք վիրտուալ միջավայր ձեր նախագծի համար և տեղադրեք հետևյալ կախվածությունները.

    pip install django djangorestframework
    
  2. Ստեղծեք Django նախագիծ, որը կոչվում է core հետևյալ հրամանով.

    django-admin startproject core .
    
  3. Ստեղծեք հավելված, որը կոչվում է recipe_manager.

    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
    class Recipe(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 մոդուլը, ինչպես նաև այն մոդելը, որը ցանկանում եք սերիականացնել.

    # serializers.py
    from rest_framework import serializers
    from .models import Recipe # the model to serialize
    
  3. Նույն ֆայլում ստեղծեք սերիալիզատորի դաս ձեր մոդելի համար և դրանում սահմանեք Meta դասը.

    # serializers.py
    class RecipeSerializer(serializers.ModelSerializer):
        class Meta:
            model = Recipe
            fields = ('recipe_name', 'ingredients', 'instructions')
    
    class Meta:
     fields = "__all__"
    

Քայլ 4. Գրեք տեսք CREATE գործողության համար

Դուք կարող եք ստեղծել դասի վրա հիմնված դիտումներ ձեր հավելվածի համար՝ ներմուծելով Django-ում հասանելի ընդհանուր տեսքը: Այս տեսակետների մասին կարող եք կարդալ Django-ի պաշտոնական փաստաթղթերից: CRUD-ի CREATE գործողությունն իրականացնելու համար դուք պետք է ներմուծեք CreateAPIView: Դուք նաև պետք է ներմուծեք ձեր սերիալիզատորը և մոդելը.

# views.py
from rest_framework.generics import CreateAPIView
from .models import Recipe
from .serializers import RecipeSerializer

CREATE օպերացիան իրականացնելու համար անհրաժեշտ է միայն նշել սերիալիզատորը, որը պետք է օգտագործի ձեր դիտումը: Ահա մի օրինակ.

# Create view
class RecipeCreateView(CreateAPIView):
    serializer_class = RecipeSerializer

Այս կարգավորումով դուք կարող եք POST հարցումներ կատարել ձեր հավելվածին:

Քայլ 5. Գրեք դիտում READ գործողության համար

  1. READ գործողությունն իրականացնելու համար ներմուծեք ListAPIView-ը ձեր դիտումների մեջ: Այս տեսքը օգնում է ձեզ թվարկել մոդելի օբյեկտները.

    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView
    
  2. Ստեղծեք դաս ձեր դիտումների համար և նշեք սերիալիզատորը և հարցումը, որը պետք է օգտագործվի.

    # List view
    class RecipeListView(ListAPIView):
        serializer_class = RecipeSerializer
        queryset = Recipe.objects.all()
    
  3. Ստեղծեք տեսարան՝ կոնկրետ բաղադրատոմս կարդալու համար: Դա անելու համար ձեզ անհրաժեշտ է RetrieveAPIView, այնպես որ ավելացրեք այն ձեր ներմուծումների ցանկում.

    # views.py
    from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveAPIView
    
    # Retrieve view
    class RecipeRetrieveView(RetrieveAPIView):
        serializer_class = RecipeSerializer
        queryset = Recipe.objects.all()
    

Քայլ 6. Գրեք դիտումներ ԹԱՐՄԱՑՄԱՆ և ՋՆՋԵԼ գործողությունների համար

UPDATE և DELETE գործողություններն իրականացնելու համար ձեզ անհրաժեշտ են համապատասխանաբար UpdateAPIView և DestroyAPIView, այնպես որ ներմուծեք դրանք՝

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

Հաջորդը, ստեղծեք դիտումները, ինչպես նախկինում արեցիք: Այս անգամ ձեր դիտումները կժառանգվեն համապատասխանաբար UpdateAPIView և DestroyAPIView-ից՝

# Update view
class RecipeUpdateView(UpdateAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
# Delete view
class RecipeDeleteView(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/<int:pk>/', views.RecipeRetrieveView.as_view(), name='recipe-retrieve'),
        # Update view
        path('recipes/<int:pk>/update/', views.RecipeUpdateView.as_view(), name='recipe-update'),
        # Delete view
        path('recipes/<int:pk>/delete/', views.RecipeDeleteView.as_view(), name='recipe-destroy'),
    ]
    

Քայլ 8. Ստուգեք ձեր API-ի վերջնակետերը

Ձեր նախագծի գրացուցակից գործարկեք հետևյալը.

python manage.py runserver

Սա պետք է գործարկի ձեր սերվերը, կատարի որոշ ստուգումներ և տպի URL, որի միջոցով կարող եք մուտք գործել:

Այժմ կարող եք ստուգել ձեր API-ի վերջնակետերը՝ նավարկելով դեպի համապատասխան URL-ներ (օրինակ՝ /api/recipes/) և ուղարկելով HTTP հարցումների մեթոդներ CRUD գործողությունների համար: Դուք պետք է տեսնեք հետևյալ լռելյայն ինտերֆեյսը.

Ձեր զննարկիչն օգտագործելու փոխարեն կարող եք փորձարկել ձեր API-ն Փոստմենի հետ:

Զբաղվել DRY-ով CRUD API-ի ստեղծման ժամանակ

DRY (Don't Repeat Yourself) ծրագրավորման սկզբունք է, որը դուք պետք է ընդունեք ձեր կոդի որակը բարելավելու համար:

Թեև վերևում գրված դիտումները լավ են աշխատում, դուք կարող եք խուսափել շատ կրկնություններից՝ օգտագործելով ListCreateAPIView և RetrieveUpdateDestroyAPIView ընդհանուր դիտումները:

ListCreateAPIView-ը միավորում է ListAPIView և CreateAPIView, մինչդեռ RetrieveUpdateDestroyAPIView միավորում է RetrieveAPIView, UpdateAPIView և : DestroyAPIViewDestroyAPIView:

Դուք կարող եք փոփոխել ձեր նախորդ դիտումները հետևյալ տեսքի համար.

from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
from .models import Recipe
from .serializers import RecipeSerializer
class RecipeListCreateAPIView(ListCreateAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()
class RecipeRetrieveUpdateDeleteAPIView(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/<int:pk>/', RecipeRetrieveUpdateDeleteAPIView.as_view(), name='recipe-retrieve-update-destroy'),
]

Դուք կարող եք ստուգել այս վերջնակետերը Postman-ի կամ ձեր նախընտրած API-ի փորձարկման ցանկացած գործիքի միջոցով:

Ընդհանուր դասի վրա հիմնված տեսակետները ձեր աշխատանքը հեշտացնում են

Ինչպես երևաց վերևում, դասի վրա հիմնված ընդհանուր դիտումները կարող են արագացնել դիտումների ստեղծման գործընթացը: Այժմ դուք միայն պետք է ժառանգեք ճիշտ APIView-ը ձեր օգտագործման դեպքի համար:

Դուք նաև պետք է համոզվեք, որ որդեգրեք լավ ծրագրավորման պրակտիկա, որպեսզի ի վերջո վատ կոդ չգրեք: