Varat bez piepūles izmantot vienkāršas API, nekonfigurējot ārēju priekšgalu. Uzziniet, kā izmantot Django veidnes API patēriņam.

Ja REST API rakstīšanai izmantojat aizmugurtehnoloģiju vai sistēmu, piemēram, Django, Laravel vai Node.js, jums ir nepieciešams lai iegūtu papildu priekšgala prasmes, izmantojot tādus ietvarus kā React, Angular un Vue, lai izmantotu API galapunktiem. Bet tas ne vienmēr tā ir, jūs varat izmantot API pašā Django, izmantojot Django veidnes.

Django projekta un API galapunktu iestatīšana

Pirmais solis būs izveidot projekta direktoriju. Atveriet savu termināli un izveidojiet sava projekta direktoriju.

mkdir payment_wallet_project
cd payment_wallet_project

Šajā apmācībā jūs izveidosit maksājumu maka API.

Pilns pirmkods ir pieejams a GitHub repozitorijs.

Sāciet ar veidojot virtuālo vidi. Šajā gadījumā jūs izmantosit Pipenv bibliotēku.

pipenv install django djangorestframework

Šī komanda instalē nepieciešamās bibliotēkas, kā arī izveido virtuālo vidi.

Aktivizējiet virtuālo vidi, izmantojot tālāk norādīto komandu:

pipenv shell

Izveidojiet jaunu Django projektu nosaukts PayApp.

django-admin startproject PayApp .

Izmantojot punktu (.) beigās django-admin komanda nodrošina, ka projekts izvairās izveidot projekta direktorijas dublikātu.

Izveidot a jaunā Django lietotne projekta direktorijā.

python manage.py startapp wallet

Tagad turpiniet veidot savu API lietojumprogrammu, veicot tālāk norādītās darbības.

Payment Wallet REST API izveide

Atveriet wallet/models.py failu un definējiet maku un darījumu modeļus.

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)

Iekš maku direktorijā, izveidojiet jaunu failu serializers.py, un uzrakstiet maku un darījumu modeļa serializatorus.

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

Serializētāji ņem vērā visus laukus maku un darījumu modeļos.

In wallet/views.py, uzrakstiet skatus, kā rīkoties ar maka funkcionalitātes ieviešanas loģiku. Tas ietver iemaksas un izņemšanas iespējas.

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

Pēc tam definējiet API URL maršrutēšanu, izveidojot a wallet/urls.py fails:

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

]

Jūsu projektā urls.py, iekļaujiet lietotnes URL:

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

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

Iekš PayApp/settings.py failu, pievienojiet maku un rest_framwork lietotnes uz INSTALLED_APPS sarakstu.

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

]

Tas reģistrēs maka un rest_framework lietotnes Django projekta lietojumprogrammā.

API izmantošana ar Django veidnēm

Tagad jūs izmantosit Django veidnes, lai izveidotu vienkāršu saskarni API izmantošanai. Izveidot a maks.html failu mapē maku/veidnes/ direktorijā un tālāk pievienojiet HTML kodu.


"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 fails nodrošina iemaksas un izņemšanas API skaistā lietotāja interfeisā, kas izstrādāts, izmantojot Bootstrap.

Lietotāja mijiedarbība ar veidlapām

HTML failā izveidojiet skripta tagu un depozīta veidlapas iesniegšanas notikumu klausītājam pievienojiet šādu kodu.

Pēc tam pievienojiet atteikuma veidlapas iesniegšanas notikumu uztvērēju, izmantojot tālāk norādīto kodu:

Pasākuma klausītājs ir atbildīgs par iemaksas un izņemšanas apstrādi (#depozīta veidlapa un #izņemšanas veidlapa) veidlapu iesniegumi.

Izgūšanas pieprasījuma vietrādis URL ir paredzēts depozīta un izņemšanas darbību vietrāžu URL saskaņošanai.

Pēc tam JSON atbildes par iemaksām un izņemšanu tiek parsētas, lai iegūtu atjauninātu bilanci (dati.bilance). Pēc tam tie tiek formatēti un parādīti lapā.

Tālāk, sadaļā wallet/views.py, pievienojiet šo atjauninājumu, lai renderētu lapu wallet.html:

from django.shortcuts import render

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

Šajā piemērā jūs izmantosit pirmais () vaicājuma metode, lai demonstrācijas nolūkos atlasītu viena lietotāja maku.

Atjauniniet urls.py failu, pievienojot ceļu uz wallet_view sekojoši:

from .views import wallet_view

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

Piekļūstiet maka lapai no URL: http://127.0.0.1:8000/home/.

Kad viss ir iestatīts un darbojas, kā paredzēts, izpildiet veic migrācijas un migrēt komandas. Visbeidzot palaidiet lietojumprogrammu:

python manage.py makemigrations
python manage.py migrate

python manage.py runserver

Lai piekļūtu API galapunktiem, dodieties uz http://127.0.0.1:8000/api/.

Paredzamā izlaide:

Dodieties uz vietējais saimnieks lai mijiedarbotos ar maku.

Paredzamā izlaide:

Maks parāda atlikumu un dod iespēju iemaksāt vai izņemt.

Izpratne par Django veidnēm un to lomu API patēriņā

Neskatoties uz to, ka Django veidnes ir lieliski piemērotas statiska satura prezentēšanai, tām ir noteikti ierobežojumi, lietojot API:

  • Ierobežota elastība: Django veidnes ir mazāk elastīgas nekā tās, kas izveidotas, izmantojot Jinja2 vai Twig, jo tās tiek izmantotas noteiktu struktūru attēlošanai. Piemēram, jums ir manuāli jāparsē JSON un jāievieto dati veidnē, ja jums ir nepieciešams izmantot API, kas atgrieza JSON datus. Tas var būt sarežģīti, galvenokārt, ja API nodrošina sarežģītas datu struktūras.
  • Nav atbalsta asinhroniem pieprasījumiem: Django veidnēm sākotnēji trūkst iespēju apstrādāt asinhronos pieprasījumus. Veidnēm joprojām ir nepieciešama sinhrona apstrāde, lai gan asinhronās/gaidīšanas mūsdienu tīmekļa sistēmas, piemēram, Flask un Django, atbalsta sintaksi. Tas nozīmē, ka pirms veidnes izveides jums būs jāgaida, līdz tiks pabeigti visi pieprasījumi, ja pirms lapas renderēšanas ir jāiegūst dati no daudziem avotiem.
  • Ierobežota kļūdu apstrāde: izmantojot API, regulāri var rasties kļūdas. Django veidnēs nav iebūvētu mehānismu graciozai kļūdu apstrādei. Ja API izsaukums neizdodas, jums būs jānoķer izņēmums un jāpārvalda tas pašā veidnē, kā rezultātā var rasties neveikls un grūti uzturēt kodu.

Veidojiet mērogojamas lietojumprogrammas

Nodrošinot veidu, kā atdalīt prezentācijas slāni no biznesa loģikas, Django veidnes ļauj izstrādātājiem koncentrēties uz atkārtoti lietojama un apkopjama koda izveidi. Tomēr to ierobežojumu dēļ Django veidnes var nebūt labākā izvēle, ja tiek patērētas API lielā mērogā. Klientu sistēmas, piemēram, React, joprojām ir noderīgas mērogojamu lietojumprogrammu veidošanā.