Voit käyttää vaivattomasti yksinkertaisia ​​API-liittymiä ilman, että sinun tarvitsee määrittää ulkoista käyttöliittymää. Opi käyttämään Django-malleja API-käyttöön.

Kun käytät taustatekniikkaa tai -kehystä, kuten Django, Laravel tai Node.js, REST-sovellusliittymien kirjoittamiseen, sinun on saadaksesi lisäkäyttöliittymän taitoja käyttämällä Reactin, Angularin ja Vuen kaltaisia ​​puitteita API: n käyttämiseen päätepisteitä. Mutta näin ei aina ole, voit käyttää sovellusliittymiä itse Djangossa käyttämällä Django-malleja.

Django-projektin ja API-päätepisteiden määrittäminen

Ensimmäinen askel on luoda projektihakemisto. Avaa terminaali ja luo hakemisto projektillesi.

mkdir payment_wallet_project
cd payment_wallet_project

Tätä opetusohjelmaa varten rakennat sovellusliittymiä maksulompakkoon.

Täysi lähdekoodi on saatavilla a GitHub-arkisto.

Aloita virtuaalisen ympäristön luominen. Tässä tapauksessa käytät Pipenv-kirjastoa.

pipenv install django djangorestframework

Tämä komento asentaa tarvittavat kirjastot sekä luo virtuaalisen ympäristön.

instagram viewer

Aktivoi virtuaaliympäristö alla olevalla komennolla:

pipenv shell

Luo uusi Django-projekti nimetty PayApp.

django-admin startproject PayApp .

Käytä pistettä (.) lopussa django-admin -komento varmistaa, että projekti ei luo päällekkäistä hakemistoa projektihakemistosta.

Luo uusi Django-sovellus projektihakemistossa.

python manage.py startapp wallet

Jatka nyt API-sovelluksen rakentamista seuraavien vaiheiden avulla.

Payment Wallet REST -sovellusliittymän luominen

Avaa wallet/models.py tiedosto ja määritä lompakko- ja tapahtumamallit.

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)

Vuonna lompakko hakemistoon, luo uusi tiedosto serializers.py, ja kirjoita lompakon ja tapahtumamallin serialisoijat.

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__'

Serialisoijat huomioivat kaikki lompakko- ja tapahtumamallien kentät.

Sisään wallet/views.py, kirjoita näkymät lompakkotoiminnallisuuden toteutuslogiikan käsittelyyn. Tämä sisältää talletus- ja kotiutusmahdollisuudet.

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

Määritä seuraavaksi API: n URL-reititys luomalla a wallet/urls.py tiedosto:

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'),

]

Projektissasi urls.py, sisällytä sovelluksen URL-osoitteet:

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

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

Vuonna PayApp/settings.py tiedosto, lisää lompakko ja rest_framwork-sovellukset kohtaan INSTALLED_APPS lista.

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

]

Tämä rekisteröi lompakko- ja rest_framework-sovellukset Django-projektisovellukseen.

API: n käyttäminen Django-malleilla

Nyt voit käyttää Django-malleja luodaksesi yksinkertaisen käyttöliittymän API: n käyttöä varten. Luo lompakko.html tiedosto tiedostoon lompakko/mallit/ hakemistoon ja lisää alla oleva HTML-koodi.


"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-tiedosto tekee talletus- ja nostosovellusliittymät kauniissa käyttöliittymässä, joka on suunniteltu Bootstrapilla.

Käyttäjän vuorovaikutus lomakkeiden kanssa

Luo HTML-tiedostoon komentosarjatunniste ja lisää seuraava koodi talletuslomakkeen lähetystapahtuman kuuntelijaan.

Lisää seuraavaksi tapahtuman kuuntelija peruutuslomakkeen lähetystä varten alla olevalla koodilla:

Tapahtuman kuuntelija on vastuussa talletuksen ja kotiutuksen käsittelystä (#talletuslomake ja #nostolomake) lomakkeen lähetykset.

Hakupyynnön URL-osoite on tarkoitettu talletus- ja nostotoimintojen URL-osoitteiden täsmäämiseen.

Talletusten ja nostojen JSON-vastaukset jäsennetään sitten päivitetyn saldon saamiseksi (data.balance). Sitten ne muotoillaan ja näytetään sivulla.

Seuraavaksi vuonna wallet/views.py, lisää seuraava päivitys hahmontaaksesi wallet.html-sivun:

from django.shortcuts import render

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

Tässä esimerkissä käytät ensimmäinen() kyselymenetelmä yhden käyttäjän lompakon valitsemiseksi esittelytarkoituksiin.

Päivitä urls.py tiedosto lisäämällä polku tiedostoon wallet_view seuraavasti:

from .views import wallet_view

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

Siirry lompakkosivulle URL-osoitteesta: http://127.0.0.1:8000/home/.

Kun kaikki on asennettu ja toimii odotetulla tavalla, suorita muuttavat ja siirtyä komentoja. Suorita lopuksi sovellus:

python manage.py makemigrations
python manage.py migrate

python manage.py runserver

Pääset API-päätepisteisiin siirtymällä kohtaan http://127.0.0.1:8000/api/.

Odotettu tulos:

Navigoi kohtaan paikallinen isäntä olla vuorovaikutuksessa lompakon kanssa.

Odotettu tulos:

Lompakko näyttää saldon ja antaa sinulle mahdollisuuden tallettaa tai kotiuttaa.

Django-mallien ymmärtäminen ja niiden rooli API-kulutuksessa

Huolimatta siitä, että Django-mallit ovat erinomaisia ​​staattisen sisällön esittämiseen, niillä on tiettyjä rajoituksia käytettäessä sovellusliittymiä:

  • Rajoitettu joustavuus: Django-mallit ovat vähemmän joustavia kuin Jinja2:lla tai Twigillä luodut, koska niitä käytetään tiettyjen rakenteiden näyttämiseen. Sinun on esimerkiksi jäsennettävä JSON manuaalisesti ja lisättävä tiedot malliin, jos joudut käyttämään API: ta, joka palautti JSON-tiedot. Tämä voi olla haastavaa, etenkin jos API tarjoaa monimutkaisia ​​tietorakenteita.
  • Ei tukea asynkronisille pyynnöille: Django-malleilta puuttuu kyky käsitellä asynkronisia pyyntöjä. Mallit tarvitsevat edelleen synkronista käsittelyä, vaikka nykyaikaiset async/wait-verkkokehykset, kuten Flask ja Django, tukevat syntaksia. Tämä tarkoittaa, että sinun on odotettava kaikkien pyyntöjen valmistumista ennen mallin tuottamista, jos sinun on hankittava tietoja useista lähteistä ennen sivun renderöimistä.
  • Rajoitettu virheiden käsittely: Virheitä saattaa ilmetä säännöllisesti API: ita käytettäessä. Django-malleissa ei ole sisäänrakennettuja mekanismeja sulavaa virheiden käsittelyä varten. Sinun on tunnistettava poikkeus ja hallinnoitava sitä itse mallissa, jos API-kutsu epäonnistuu, mikä voi johtaa kömpelöön ja vaikeasti ylläpidettävään koodiin.

Rakenna skaalautuvia sovelluksia

Tarjoamalla tavan erottaa esityskerros liiketoimintalogiikasta, Django-mallit antavat kehittäjille mahdollisuuden keskittyä uudelleenkäytettävän ja ylläpidettävän koodin luomiseen. Django-mallit eivät kuitenkaan rajoitustensa vuoksi välttämättä ole paras valinta käytettäessä API-liittymiä suuressa mittakaavassa. Reactin kaltaiset asiakaskehykset ovat edelleen hyödyllisiä skaalautuvien sovellusten rakentamisessa.