आप बाहरी फ्रंटएंड को कॉन्फ़िगर करने की आवश्यकता के बिना आसानी से सरल एपीआई का उपभोग कर सकते हैं। एपीआई खपत के लिए Django टेम्पलेट्स का उपयोग करना सीखें।

REST API लिखने के लिए Django, Laravel, या Node.js जैसी बैकएंड तकनीक या फ्रेमवर्क का उपयोग करते समय, आपको इसकी आवश्यकता होगी एपीआई का उपभोग करने के लिए रिएक्ट, एंगुलर और वीयू जैसे फ्रेमवर्क का उपयोग करके अतिरिक्त फ्रंटएंड कौशल प्राप्त करना समापनबिंदु. लेकिन हमेशा ऐसा नहीं होता है, आप Django टेम्प्लेट का उपयोग करके Django में ही API का उपभोग कर सकते हैं।

Django प्रोजेक्ट और API एंडपॉइंट सेट अप करना

पहला कदम एक प्रोजेक्ट निर्देशिका बनाना होगा। अपना टर्मिनल खोलें और अपने प्रोजेक्ट के लिए एक निर्देशिका बनाएं।

mkdir payment_wallet_project
cd payment_wallet_project

इस ट्यूटोरियल के लिए, आप भुगतान वॉलेट के लिए एपीआई बनाएंगे।

पूर्ण स्रोत कोड a में उपलब्ध है गिटहब रिपॉजिटरी.

से शुरू एक आभासी वातावरण बनाना. इस मामले में, आप Pipenv लाइब्रेरी का उपयोग करेंगे।

pipenv install django djangorestframework

यह कमांड आवश्यक पुस्तकालयों को स्थापित करने के साथ-साथ एक आभासी वातावरण भी बनाता है।

instagram viewer

नीचे दिए गए आदेश का उपयोग करके आभासी वातावरण सक्रिय करें:

pipenv shell

एक नया Django प्रोजेक्ट बनाएं नाम PayApp.

django-admin startproject PayApp .

पूर्णविराम का प्रयोग (.) के अंत में django-एडमिन कमांड यह सुनिश्चित करता है कि प्रोजेक्ट प्रोजेक्ट निर्देशिका की डुप्लिकेट निर्देशिका बनाने से बचता है।

एक बनाने के नया Django ऐप प्रोजेक्ट निर्देशिका के भीतर.

python manage.py startapp wallet

अब, नीचे दिए गए चरणों का उपयोग करके अपना एपीआई एप्लिकेशन बनाने के लिए आगे बढ़ें।

पेमेंट वॉलेट REST API बनाना

खोलें वॉलेट/models.py वॉलेट और लेनदेन मॉडल को फ़ाइल करें और परिभाषित करें।

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)

में बटुआ निर्देशिका, एक नई फ़ाइल बनाएँ क्रमबद्धकर्ता.py, और वॉलेट और लेनदेन मॉडल सीरिएलाइज़र लिखें।

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

सीरिएलाइज़र वॉलेट और लेनदेन मॉडल में सभी क्षेत्रों पर विचार करते हैं।

में वॉलेट/views.py, वॉलेट कार्यक्षमता को लागू करने के तर्क को संभालने के लिए विचार लिखें। इसमें जमा और निकासी क्षमताएं शामिल हैं।

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

इसके बाद, एपीआई बनाकर यूआरएल रूटिंग को परिभाषित करें वॉलेट/urls.py फ़ाइल:

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

]

आपके प्रोजेक्ट में urls.py, ऐप के यूआरएल शामिल करें:

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

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

में PayApp/settings.py फ़ाइल, जोड़ें बटुआ और रेस्ट_फ़्रेमवर्क ऐप्स तक इंस्टॉल_ऐप्स सूची।

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

]

यह वॉलेट और रेस्ट_फ्रेमवर्क ऐप्स को Django प्रोजेक्ट एप्लिकेशन में पंजीकृत करेगा।

Django टेम्पलेट्स के साथ एपीआई का उपभोग

अब, आप एपीआई उपभोग के लिए एक सरल फ्रंटएंड बनाने के लिए Django टेम्पलेट्स का उपयोग करेंगे। एक बनाने के वॉलेट.एचटीएमएल फ़ाइल में वॉलेट/टेम्पलेट्स/ निर्देशिका और नीचे HTML कोड जोड़ें।


"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 फ़ाइल बूटस्ट्रैप का उपयोग करके डिज़ाइन किए गए एक सुंदर उपयोगकर्ता इंटरफ़ेस में जमा और निकासी एपीआई प्रस्तुत करती है।

प्रपत्रों के साथ उपयोगकर्ता सहभागिता

HTML फ़ाइल में, एक स्क्रिप्ट टैग बनाएं और डिपॉजिट फॉर्म सबमिशन इवेंट श्रोता में निम्नलिखित कोड जोड़ें।

इसके बाद, नीचे दिए गए कोड का उपयोग करके निकासी फॉर्म जमा करने के लिए इवेंट श्रोता जोड़ें:

इवेंट श्रोता जमा और निकासी को संभालने के लिए जिम्मेदार है (#जमा-प्रपत्र और #वापसी फॉर्म) फॉर्म सबमिशन।

लाने के अनुरोध का यूआरएल जमा और निकासी कार्यों के लिए यूआरएल के मिलान के लिए है।

जमा और निकासी के लिए JSON प्रतिक्रियाओं को अद्यतन शेष प्राप्त करने के लिए पार्स किया जाता है (डेटा.संतुलन). फिर उन्हें स्वरूपित किया जाता है और पृष्ठ पर प्रदर्शित किया जाता है।

अगला, में वॉलेट/views.py, वॉलेट.एचटीएमएल पेज को रेंडर करने के लिए निम्नलिखित अपडेट जोड़ें:

from django.shortcuts import render

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

इस उदाहरण में, आप इसका उपयोग करेंगे पहला() प्रदर्शन उद्देश्यों के लिए एकल उपयोगकर्ता के बटुए का चयन करने के लिए क्वेरी विधि।

अद्यतन करें urls.py में एक पथ जोड़कर फ़ाइल करें वॉलेट_व्यू निम्नलिखित नुसार:

from .views import wallet_view

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

यूआरएल से वॉलेट पेज तक पहुंचें: http://127.0.0.1:8000/home/.

सब कुछ सेट अप करने और अपेक्षा के अनुरूप काम करने के बाद, इसे निष्पादित करें makemigrations और माइग्रेट आदेश. अंत में, एप्लिकेशन चलाएँ:

python manage.py makemigrations
python manage.py migrate

python manage.py runserver

एपीआई एंडपॉइंट तक पहुंचने के लिए, नेविगेट करें http://127.0.0.1:8000/api/.

अपेक्षित उत्पादन:

पर नेविगेट करें स्थानीय होस्ट बटुए के साथ बातचीत करने के लिए.

अपेक्षित उत्पादन:

वॉलेट शेष राशि दिखाता है और आपको जमा करने या निकालने का विकल्प देता है।

Django टेम्पलेट्स और एपीआई खपत में उनकी भूमिका को समझना

स्थैतिक सामग्री प्रस्तुत करने के लिए उत्कृष्ट होने के बावजूद, एपीआई का उपयोग करते समय Django टेम्पलेट्स पर कुछ प्रतिबंध हैं:

  • सीमित लचीलापन: Django टेम्प्लेट Jinja2 या Twig का उपयोग करके बनाए गए टेम्प्लेट की तुलना में कम लचीले होते हैं क्योंकि उनका उपयोग निर्दिष्ट संरचनाओं को प्रदर्शित करने के लिए किया जाता है। उदाहरण के लिए, यदि आपको JSON डेटा लौटाने वाली API का उपभोग करने की आवश्यकता है, तो आपको JSON को मैन्युअल रूप से पार्स करना होगा और डेटा को टेम्पलेट में डालना होगा। यह चुनौतीपूर्ण हो सकता है, मुख्यतः यदि एपीआई जटिल डेटा संरचनाएं प्रदान करता है।
  • अतुल्यकालिक अनुरोधों के लिए कोई समर्थन नहीं: Django टेम्प्लेट में मूल रूप से अतुल्यकालिक अनुरोधों को संभालने की क्षमता का अभाव होता है। टेम्प्लेट को अभी भी सिंक्रोनस प्रोसेसिंग की आवश्यकता है, भले ही फ्लास्क और डीजेंगो जैसे एसिंक/वेट समकालीन वेब फ्रेमवर्क सिंटैक्स का समर्थन करते हैं। इसका मतलब यह है कि यदि आपको किसी पृष्ठ को प्रस्तुत करने से पहले कई स्रोतों से डेटा प्राप्त करने की आवश्यकता है, तो आपको टेम्पलेट बनाने से पहले सभी अनुरोधों के समाप्त होने तक इंतजार करना होगा।
  • सीमित त्रुटि प्रबंधन: एपीआई का उपयोग करते समय त्रुटियां नियमित रूप से हो सकती हैं। Django टेम्प्लेट में सुचारु त्रुटि प्रबंधन के लिए कोई अंतर्निहित तंत्र नहीं हैं। यदि एपीआई कॉल विफल हो जाती है, तो आपको अपवाद को पकड़ना होगा और इसे टेम्पलेट के भीतर ही प्रबंधित करना होगा, जिसके परिणामस्वरूप कोड को बनाए रखना अनाड़ी और चुनौतीपूर्ण हो सकता है।

स्केलेबल एप्लिकेशन बनाएं

प्रेजेंटेशन परत को व्यावसायिक तर्क से अलग करने का एक तरीका प्रदान करके, Django टेम्पलेट डेवलपर्स को पुन: प्रयोज्य और रखरखाव योग्य कोड बनाने पर ध्यान केंद्रित करने की अनुमति देते हैं। हालाँकि, उनकी सीमाओं के कारण, बड़े पैमाने पर एपीआई का उपभोग करते समय Django टेम्पलेट सबसे अच्छा विकल्प नहीं हो सकता है। रिएक्ट जैसे क्लाइंट फ्रेमवर्क अभी भी स्केलेबल एप्लिकेशन बनाने में उपयोगी हैं।