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-ը և կարգավորեք ձեր նախագիծը
-
Ստեղծեք վիրտուալ միջավայր ձեր նախագծի համար և տեղադրեք հետևյալ կախվածությունները.
pip install django djangorestframework
Ստեղծեք Django նախագիծ, որը կոչվում է core հետևյալ հրամանով.
django-admin startproject core .
Ստեղծեք հավելված, որը կոչվում է recipe_manager.
python manage.py startapp recipe_manager
Բացեք ձեր core/settings.py ֆայլը և անցեք INSTALLED_APPS ցանկ՝ ձեր հավելվածները գրանցելու համար.
INSTALLED_APPS = [ # custom apps 'rest_framework', 'recipe_manager', ]
Քայլ 2. Ստեղծեք մոդել ձեր բաղադրատոմսի հավելվածի համար
Բացեք ձեր 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()
Ստեղծեք միգրացիաներ և տեղափոխեք ձեր մոդելը տվյալների բազա այս հրամանով.
python manage.py makemigrations && python manage.py migrate
Քայլ 3. Ստեղծեք սերիալիզատոր Ձեր հավելվածի համար
Սերիալիզատորը Django բաղադրիչն է, որն օգնում է ձեզ փոխակերպել տվյալների բարդ տեսակները, ինչպիսիք են ձեր հարցումների հավաքածուն, այնպիսի ձևաչափի, որը կարող եք մատուցել, օրինակ՝ JSON կամ XML, և հակառակը:
Սերիալիզատոր ստեղծելու համար հետևեք հետևյալ քայլերին.
- Ստեղծեք recipe_manager/serializers.py անունով ֆայլ:
Ներմուծեք serializers մոդուլը, ինչպես նաև այն մոդելը, որը ցանկանում եք սերիականացնել.
# serializers.py from rest_framework import serializers from .models import Recipe # the model to serialize
Նույն ֆայլում ստեղծեք սերիալիզատորի դաս ձեր մոդելի համար և դրանում սահմանեք 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 գործողության համար
READ գործողությունն իրականացնելու համար ներմուծեք ListAPIView-ը ձեր դիտումների մեջ: Այս տեսքը օգնում է ձեզ թվարկել մոդելի օբյեկտները.
# views.py from rest_framework.generics import CreateAPIView, ListAPIView
Ստեղծեք դաս ձեր դիտումների համար և նշեք սերիալիզատորը և հարցումը, որը պետք է օգտագործվի.
# List view class RecipeListView(ListAPIView): serializer_class = RecipeSerializer queryset = Recipe.objects.all()
Ստեղծեք տեսարան՝ կոնկրետ բաղադրատոմս կարդալու համար: Դա անելու համար ձեզ անհրաժեշտ է 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-ներ Ձեր հավելվածի համար
Ավելացրեք այս կոդը core/urls.py՝ ձեր URL-ները կարգավորելու համար.
from django.urls import path, include urlpatterns = [ path('api/', include('recipe_manager.urls')) ]
Ավելացրեք հետևյալ կոդը ձեր 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-ը ձեր օգտագործման դեպքի համար:
Դուք նաև պետք է համոզվեք, որ որդեգրեք լավ ծրագրավորման պրակտիկա, որպեսզի ի վերջո վատ կոդ չգրեք: