Saate hõlpsalt kasutada lihtsaid API-sid, ilma et peaksite konfigureerima välist kasutajaliidest. Siit saate teada, kuidas Django malle API tarbimiseks kasutada.

Kui kasutate REST API-de kirjutamiseks taustatehnoloogiat või raamistikku, nagu Django, Laravel või Node.js, peate omada täiendavaid kasutajaliidese oskusi, kasutades API tarbimiseks selliseid raamistikke nagu React, Angular ja Vue lõpp-punktid. Kuid see ei ole alati nii, saate Django enda API-sid kasutada Django mallide abil.

Django projekti ja API lõpp-punktide seadistamine

Esimene samm on projektikataloogi loomine. Avage oma terminal ja looge oma projekti jaoks kataloog.

mkdir payment_wallet_project
cd payment_wallet_project

Selle õpetuse jaoks koostate maksete rahakoti jaoks API-d.

Täielik lähtekood on saadaval a GitHubi hoidla.

Alusta sellest virtuaalse keskkonna loomine. Sel juhul kasutate Pipenvi teeki.

pipenv install django djangorestframework

See käsk installib nii vajalikud teegid kui ka loob virtuaalse keskkonna.

Aktiveerige virtuaalne keskkond alloleva käsu abil:

instagram viewer
pipenv shell

Looge uus Django projekt nimega PayApp.

django-admin startproject PayApp .

Kasutades punkti (.) lõpus django-admin käsk tagab, et projekt väldib projekti kataloogi dubleeriva kataloogi loomist.

Loo uus Django rakendus projekti kataloogis.

python manage.py startapp wallet

Nüüd jätkake oma API-rakenduse loomist, järgides alltoodud samme.

Payment Walleti REST API loomine

Ava wallet/models.py faili ning määratleda rahakoti ja tehingumudelid.

from django.db import models

classWallet(models.Model):
user = models.CharField(max_length=100)
balance = models.DecimalField(max_digits=10, decimal_places=2)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)

def__str__(self):
return self.user

classTransaction(models.Model):
wallet = models.ForeignKey(Wallet, on_delete=models.CASCADE)
amount = models.DecimalField(max_digits=10, decimal_places=2)
timestamp = models.DateTimeField(auto_now_add=True)

Aastal rahakott kataloogi, looge uus fail serializers.py, ning kirjutage rahakoti ja tehingumudeli serialisers.

from rest_framework import serializers
from .models import Wallet, Transaction

classWalletSerializer(serializers.ModelSerializer):
classMeta:
model = Wallet
fields = '__all__'
classTransactionSerializer(serializers.ModelSerializer):
classMeta:
model = Transaction
fields = '__all__'

Serialiseerijad võtavad arvesse kõiki rahakoti ja tehingumudelite välju.

sisse wallet/views.py, kirjutage rahakoti funktsionaalsuse juurutamise loogika käsitlemise vaated. See hõlmab sisse- ja väljamaksevõimalusi.

from rest_framework import generics, status
from rest_framework.response import Response
from rest_framework.decorators import action
from decimal import Decimal
from .models import Wallet, Transaction
from .serializers import WalletSerializer, TransactionSerializer

classWalletViewSet(viewsets.ModelViewSet):
queryset = Wallet.objects.all()
serializer_class = WalletSerializer

@action(detail=True, methods=['post'])
defdeposit(self, request, pk=None):
wallet = self.get_object()
amount = Decimal(request.data['amount'])
wallet.balance += amount
wallet.save()
serializer = WalletSerializer(wallet)
return Response(serializer.data)

@action(detail=True, methods=['post'])
defwithdraw(self, request, pk=None):
wallet = self.get_object()
amount = Decimal(request.data['amount'])
if wallet.balance < amount:
return Response({'error': 'Insufficient funds'},
status=status.HTTP_400_BAD_REQUEST)
wallet.balance -= amount
wallet.save()
serializer = WalletSerializer(wallet)
return Response(serializer.data)'

classTransactionViewSet(viewsets.ModelViewSet):
queryset = Transaction.objects.all()
Serializer_class = TransactionSerializer

Järgmisena määrake API jaoks URL-i marsruutimine, luues a wallet/urls.py fail:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import WalletViewSet, TransactionViewSet, wallet_view

router = DefaultRouter()
router.register(r'wallets', WalletViewSet, basename='wallets')
router.register(r'transactions', TransactionViewSet, basename='transactions')

urlpatterns = [
path('api/', include(router.urls)),
path('wallets//deposit/', WalletViewSet.as_view({'post': 'deposit'}),
name='wallet-deposit'),
path('wallets//withdraw/', WalletViewSet.as_view({'post': 'withdraw'}),
name='wallet-withdraw'),

]

Teie projektis urls.py, lisage rakenduse URL-id:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('wallet.urls')),
]

Aastal PayApp/settings.py faili, lisage rahakott ja rest_framwork rakendused juurde INSTALLED_APPS nimekirja.

INSTALLED_APPS = [

"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",

"rest_framework", # new
"wallet", # new

]

See registreerib rahakoti ja rest_frameworki rakendused Django projektirakendusse.

API tarbimine Django mallidega

Nüüd saate kasutada Django malle, et luua API tarbimiseks lihtne kasutajaliides. Loo rahakott.html faili rahakott/mallid/ kataloogi ja lisage allpool olev HTML-kood.


"en">

"UTF-8">
"viewport" content="width=device-width, initial-scale=1">
Wallet
"stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/
css/bootstrap.min.css">


class="container">

Wallets


class="table">














User Balance Actions
{{ wallet.user }} "balance">{{ wallet.balance }}
"loading-indicator"class="d-none">
class="spinner-bordertext-primary" role="status">
class="sr-only">Loading...span>

Please wait while the deposit is being processed.



"deposit-form" method="post">
{% csrf_token %}
"number" name="amount" step="0.01" min="0" required>

"post" id="withdraw-form">
{% csrf_token %}
"number" name="amount" step="0.01" min="0" required>



HTML-fail muudab sissemakse ja väljamakse API-d kauni kasutajaliidese abil, mis on loodud Bootstrapi abil.

Kasutaja suhtlus vormidega

Looge HTML-failis skriptimärgend ja lisage sissemaksevormi esitamise sündmuse kuulajale järgmine kood.

Järgmisena lisage taganemisvormi esitamise sündmusekuulaja, kasutades allolevat koodi:

Sündmuse kuulaja vastutab sissemakse ja väljamakse käsitlemise eest (#deposiitvorm ja #taganemisvorm) vormi esildised.

Tootmistaotluse URL on mõeldud sissemakse- ja väljamaksetoimingute URL-ide sobitamiseks.

Seejärel sõelutakse sisse- ja väljamaksete JSON-vastused, et saada värskendatud saldo (andmed.bilanss). Seejärel need vormindatakse ja kuvatakse lehel.

Järgmisena wallet/views.py, lisage lehe wallet.html renderdamiseks järgmine värskendus:

from django.shortcuts import render

defwallet_view(request):
# Retrieve the wallet to display
wallet = Wallet.objects.first()
return render(request, 'wallet.html', {'wallet': wallet})

Selles näites kasutate esimene () päringumeetod ühe kasutaja rahakoti valimiseks tutvustamise eesmärgil.

Värskendage urls.py faili, lisades sellele tee wallet_view järgnevalt:

from .views import wallet_view

urlpatterns = [
...
path('home/', wallet_view, name='wallet-page'),
]

Juurdepääs rahakoti lehele URL-i kaudu: http://127.0.0.1:8000/home/.

Kui kõik on seadistatud ja töötab ootuspäraselt, käivitage rändavad ja rändama käske. Lõpuks käivitage rakendus:

python manage.py makemigrations
python manage.py migrate

python manage.py runserver

API lõpp-punktidele juurdepääsuks navigeerige saidile http://127.0.0.1:8000/api/.

Eeldatav väljund:

Navigeerige lehele kohalik host rahakotiga suhelda.

Eeldatav väljund:

Rahakott näitab saldot ja annab võimaluse kas sissemakse või väljamakse tegemiseks.

Django mallide mõistmine ja nende roll API tarbimisel

Vaatamata sellele, et Django mallid on suurepärased staatilise sisu esitamiseks, on neil API-de kasutamisel teatud piirangud.

  • Piiratud paindlikkus: Django mallid on vähem paindlikud kui Jinja2 või Twigi abil loodud mallid, kuna neid kasutatakse määratud struktuuride kuvamiseks. Näiteks peaksite JSON-i käsitsi sõeluma ja sisestama andmed malli, kui teil on vaja kasutada API-d, mis tagastas JSON-andmed. See võib olla keeruline, peamiselt siis, kui API pakub keerukaid andmestruktuure.
  • Asünkroonsete päringute tugi puudub: Django mallidel puudub algselt võime käsitleda asünkroonseid taotlusi. Mallid vajavad endiselt sünkroonset töötlemist, kuigi kaasaegsed veebiraamistikud, nagu Flask ja Django, toetavad süntaksit. See tähendab, et peate enne malli loomist ootama kõigi päringute lõpetamist, kui teil on vaja enne lehe renderdamist hankida andmeid paljudest allikatest.
  • Piiratud vigade käsitlemine: API-de kasutamisel võib regulaarselt esineda vigu. Django mallides pole sisseehitatud mehhanisme graatsiliseks vigade käsitlemiseks. Kui API-kutse nurjub, peate erandi tabama ja seda mallis endas haldama, mis võib põhjustada kohmakat ja raskesti hooldatavat koodi.

Ehitage skaleeritavaid rakendusi

Pakkudes viisi esitluskihi äriloogikast eraldamiseks, võimaldavad Django mallid arendajatel keskenduda korduvkasutatava ja hooldatava koodi loomisele. Kuid oma piirangute tõttu ei pruugi Django mallid olla API-de ulatuslikul tarbimisel parim valik. Sellised kliendiraamistikud nagu React on skaleeritavate rakenduste loomisel endiselt kasulikud.