जब से मैंने प्रोग्रामिंग के साथ अपनी यात्रा शुरू की है, मैंने एक दिलचस्प पैटर्न देखा है: अधिकांश एप्लिकेशन टेम्प्लेटेड हैं। हाँ, यह एक शुद्ध तथ्य है! बस यहीं, इस लेख की शुरुआत में रुकें, और अपने द्वारा विकसित सभी प्रोजेक्ट के बारे में सोचना शुरू करें।
उनमें क्या समानता है? अगर आप ध्यान से देखें, तो आप पाएंगे कि कई मुख्य कार्यात्मकताएँ अलग-अलग परियोजनाओं में दोबारा इस्तेमाल की जाती हैं। इन मुख्य कार्यात्मकताओं में अक्सर उपयोगकर्ता प्रमाणीकरण, भुगतान प्रक्रिया, उपयोगकर्ता प्रबंधन और बहुत कुछ शामिल होता है।
इस लेख में, मैं यह मुद्दा उठाना चाहूँगा कि ये सभी पैटर्न पहले से ही अतीत के प्रोग्रामर द्वारा बनाए गए थे। वास्तव में, हम अभी जो कुछ भी उपयोग कर रहे हैं, वह पहले से ही लागू किया गया था। हम केवल विशिष्ट परियोजना के आधार पर कुछ कार्यक्षमता को संशोधित करते हैं।
मैं आपको पायथन में बैकएंड विकास के परिप्रेक्ष्य से उदाहरण प्रस्तुत करूंगा, लेकिन इसे किसी भी प्रोग्रामिंग भाषा या सॉफ्टवेयर इंजीनियरिंग के किसी भी क्षेत्र में लागू किया जा सकता है।
तो, सभी बैकएंड एप्लीकेशन में क्या समानता है? आइए एक नज़र डालते हैं!
नोट : यदि आप ओओपी (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) से परिचित हैं, तो अपने टेम्प्लेटेड मॉड्यूल को उच्चतम स्तर के अमूर्तन के रूप में मानें, लेकिन एप्लिकेशन स्तर पर ताकि इसे इस सिद्धांत के अनुसार लिखा जा सके।
मैं प्रत्येक अनुभाग को बुनियादी घटकों में विभाजित करना चाहूंगा, जिन्हें लगभग किसी भी बैकएंड एप्लिकेशन पर लागू किया जा सकता है।
मौलिक संघटक
2.1 उपयोगकर्ता मॉडल
हम User
की सबसे सामान्य श्रेणी को उन विशेषताओं के साथ परिभाषित कर रहे हैं जिन्हें किसी भी विशिष्ट उपयोगकर्ता पर लागू किया जा सकता है।
from werkzeug.security import generate_password_hash, check_password_hash class User: def __init__(self, username, password, email): self.username = username self.password_hash = generate_password_hash(password) self.email = email self.roles = [] def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password)
2.2 टोकन प्रबंधन
टोकन-आधारित प्रमाणीकरण के लिए JWT का उपयोग करना साइबर सुरक्षा और बैकएंड विकास में सर्वोत्तम प्रथाओं के संदर्भ में एक अच्छा विकल्प है।
def generate_token(user): payload = { 'username': user.username, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) } return jwt.encode(payload, SECRET_KEY, algorithm='HS256') def verify_token(token): try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return payload['username'] except jwt.ExpiredSignatureError: return None except jwt.InvalidTokenError: return None
2.3 सज्जाकार
from functools import wraps from flask import request, jsonify, session def is_authenticated(func): @wraps(func) def decorated_function(*args, **kwargs): if 'user' not in session: return jsonify({"error": "User not authenticated"}), 401 return func(*args, **kwargs) return decorated_function
def roles_required(*roles): def decorator(func): @wraps(func) def decorated_function(*args, **kwargs): user_roles = session.get('roles', []) if not any(role in user_roles for role in roles): return jsonify({"error": "User does not have the required role"}), 403 return func(*args, **kwargs) return decorated_function return decorator
और मूल रूप से, बस इतना ही! आप सभी परियोजनाओं में प्रमाणीकरण के लिए इस पूर्वनिर्धारित कार्यक्षमता का उपयोग कर सकते हैं!
लगभग हर एप्लीकेशन वित्तीय लेनदेन को संभालती है। चाहे वह स्थानीय कसाई की दुकान हो या कोई बड़ी उद्यम कंपनी, आपको भुगतान एकत्र करने के लिए एक प्रभावी प्रणाली का उपयोग करने की आवश्यकता होगी।
मौलिक संघटक
Stripe
या PayPal
जैसे भुगतान गेटवे से जुड़ना
3.1 भुगतान गेटवे एकीकरण
इसका उपयोग विभिन्न भुगतान गेटवे को एकीकृत करने के लिए आधार के रूप में किया जा सकता है, जिसमें स्ट्राइप के लिए एक ठोस कार्यान्वयन है। आम तौर पर, मेरी व्यक्तिगत प्राथमिकता भुगतान के लिए StripeAPI
का उपयोग करना है क्योंकि यह बाजार में लंबे समय से है, और वास्तव में, किसी भी परियोजना में एकीकृत करना आसान है।
class PaymentGateway(ABC): @abstractmethod def create_payment_intent(self, amount, currency='gbp'): pass @abstractmethod def confirm_payment(self, payment_id): pass @abstractmethod def handle_webhook(self, payload, sig_header): pass
यह भुगतान गेटवे के लिए सबसे सामान्य उदाहरण है, और आप अपनी आवश्यकताओं के अनुसार विशिष्ट कार्यान्वयन पर ध्यान केंद्रित कर सकते हैं।
3.2 भुगतान मॉडल
भुगतान जानकारी संग्रहीत करने के लिए मॉडल परिभाषित करें। इस उदाहरण को ORM के साथ उपयोग के लिए अनुकूलित किया जा सकता है। यदि आवश्यक हो तो आप कक्षाओं का अधिक जटिल पदानुक्रम बना सकते हैं, लेकिन इस उदाहरण के लिए, निम्नलिखित स्निपेट काफी पर्याप्त होना चाहिए।
class Payment: def __init__(self, user_id, amount, currency): self.id = uuid.uuid4() self.user_id = user_id self.amount = amount self.currency = currency self.status = status payments = []
सभी भुगतानों को डेटाबेस में सहेजें और 3.3 अनुभाग के लिए लेनदेन को संसाधित करने के लिए Celery
कार्य सेट करें। डेटाबेस रिकॉर्ड निम्न की तरह दिखना चाहिए:
id | user_id | amount | currency | status --------------------------------------+-----------------------------------+--------+----------+---------- e532d653-7c8b-453a-8cd4-3ab956863d72 | 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 100.00 | USD | Failed 35985d41-5d54-4021-bed6-82d7233cc353 | a0984002-bace-478e-b6f9-6e4459e1b5ba | 250.50 | EUR | Pending 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 9f896874-dc43-4592-8289-d0f7f8b8583a | 99.99 | GBP | Completed
अब, हमने एक जटिल प्रणाली बनाई है जिसे किसी भी परियोजना में एकीकृत किया जा सकता है। क्या आप अभी भी पैटर्न का पालन कर रहे हैं? इसका उपयोग हर जगह किया जा सकता है!
आखिरकार, आप इस डेटा के विज़ुअलाइज़ेशन के लिए एक और एप्लिकेशन परिभाषित कर सकते हैं। टेम्प्लेटिंग के बारे में आपकी बात समझ में आ गई! 😉
ईमेल और नोटिफ़िकेशन उपयोगकर्ताओं को सूचित रखते हैं और उन्हें आपके ऐप के जीवन में व्यस्त रखते हैं। चाहे वह खाता सत्यापन, पासवर्ड रीसेट या मार्केटिंग संचार के लिए हो, किसी भी प्रकार की परियोजना के लिए एक विश्वसनीय ईमेल सेवा आवश्यक है।
SendGrid
या Amazon SES
जैसी ईमेल सेवाओं से जुड़ना।
4.1 ईमेल सेवा एकीकरण
EmailService
वर्ग के अंदर ईमेल भेजने के लिए SendGrid
के मुख्य तर्क को परिभाषित करें।
import sendgrid from sendgrid.helpers.mail import Mail class EmailService: def __init__(self, api_key): self.sg = sendgrid.SendGridAPIClient(api_key) def send_email(self, from_email, to_email, subject, html_content): email = Mail( from_email=from_email, to_emails=to_email, subject=subject, html_content=html_content ) try: response = self.sg.send(email) return response.status_code except Exception as e: return str(e)
पेमेंट गेटवे की तरह, आपको बाज़ार में किसी खास यूटिलिटी या उत्पाद पर ध्यान केंद्रित करने की ज़रूरत नहीं है। यह सिर्फ़ एक उदाहरण है कि इसे कैसे सामान्यीकृत किया जा सकता है और किसी भी प्रोजेक्ट के लिए टेम्पलेट किया जा सकता है।
4.2 ईमेल टेम्पलेट
इस तरह की प्रणालियों के लिए मेरा पसंदीदा पैटर्न हैंडलर्स पैटर्न है; आप शब्दकोश में ईमेल के प्रकार के रूप में अधिक से अधिक कुंजियाँ जोड़ते हैं, तथा सामग्री के साथ फ़ाइल का पथ जोड़ते हैं।
email_templates = { 'welcome': “welcome.html”, 'reset_password': "<h1>Reset Your Password</h1><p>Click <a href='{link}'>here</a> to reset your password.</p>" }
अन्यथा, समान उद्देश्यों के लिए Enum
परिभाषित करना अच्छा हो सकता है।
4.3 ईमेल भेजना
हमें जादू को सच करने के लिए एक फ़ंक्शन की आवश्यकता है! आइए निम्नलिखित लिखें:
def send_email(email_service, from_email, to_email, subject, template_name, **template_vars): """ Send an email using the specified email service. """ html_content = get_email_template(template_name, **template_vars) return email_service.send_email(from_email, to_email, subject, html_content)
एक अन्य महत्वपूर्ण बिंदु सभी बैकएंड परियोजनाओं में कई फाइलें जोड़ना होगा, जैसे कि README
.env
config.py
, pyproject.toml,
.pre-commit.yml
और परियोजना के अंदर फाइलों की आधार संरचना तैयार करना।
यद्यपि सुझाई गई संरचना पायथन कार्यान्वयन के लिए थोड़ी सख्त है, जैसा कि मैंने पहले उल्लेख किया है, आप किसी अन्य भाषा या क्षेत्र के लिए भी ऐसा ही कर सकते हैं।
यह भी ध्यान रखना महत्वपूर्ण है कि अमूर्तता के उच्चतम स्तर पर टेम्प्लेटिंग और एप्लिकेशन की अच्छी संरचना बनाए रखना महत्वपूर्ण हो सकता है।
अन्य परियोजनाओं के लिए पैकेज के रूप में या माइक्रोसर्विस आर्किटेक्चर के अतिरिक्त के रूप में पुन: उपयोग किया जा सकता है।
सब कुछ टेम्पलेट किया जा सकता है!
यहाँ दिए गए उदाहरण सिर्फ़ शुरुआत हैं - जैसे-जैसे आपकी परियोजनाएँ विकसित होती हैं, इन पैटर्न को और अधिक जटिल परिदृश्यों को कवर करने के लिए बढ़ाया और परिष्कृत किया जा सकता है। आप caching
जोड़कर k8s
, docker
, Devops
इंफ्रास्ट्रक्चर, CI/CD
और पाइपलाइन स्थापित कर सकते हैं।
एक सरल कथन याद रखें: एक बार आपने अपना काम ठीक से कर लिया, तो आप उसी काम का उपयोग किसी अन्य काम को पूरा करने के लिए कर सकते हैं।
इसका लक्ष्य परियोजना, बुनियादी ढांचे, घटकों और सेवाओं को विभिन्न अनुप्रयोगों में पुनः प्रयोज्य बनाना है!
अपने लिए एक कप चाय बनाएं और सोचें कि आपके एप्लिकेशन के कौन से हिस्से अलग-अलग ऐप में फिर से इस्तेमाल किए जा सकते हैं। समान सेवाएँ बनाने और अपने काम को स्वचालित करने का प्रयास करें, केवल कुछ कोड टुकड़ों को समायोजित करें!
पढ़ने के लिए धन्यवाद, और टेम्पलेटिंग का आनंद लें!