1 परिचय जब से मैंने प्रोग्रामिंग के साथ अपनी यात्रा शुरू की है, मैंने एक दिलचस्प पैटर्न देखा है: हाँ, यह एक शुद्ध तथ्य है! बस यहीं, इस लेख की शुरुआत में रुकें, और अपने द्वारा विकसित सभी प्रोजेक्ट के बारे में सोचना शुरू करें। अधिकांश एप्लिकेशन टेम्प्लेटेड हैं। अगर आप ध्यान से देखें, तो आप पाएंगे कि कई मुख्य कार्यात्मकताएँ अलग-अलग परियोजनाओं में दोबारा इस्तेमाल की जाती हैं। इन मुख्य कार्यात्मकताओं में अक्सर उपयोगकर्ता प्रमाणीकरण, भुगतान प्रक्रिया, उपयोगकर्ता प्रबंधन और बहुत कुछ शामिल होता है। उनमें क्या समानता है? इस लेख में, मैं यह मुद्दा उठाना चाहूँगा कि ये सभी पैटर्न पहले से ही अतीत के प्रोग्रामर द्वारा बनाए गए थे। हम केवल विशिष्ट परियोजना के आधार पर कुछ कार्यक्षमता को संशोधित करते हैं। वास्तव में, हम अभी जो कुछ भी उपयोग कर रहे हैं, वह पहले से ही लागू किया गया था। मैं आपको पायथन में बैकएंड विकास के परिप्रेक्ष्य से उदाहरण प्रस्तुत करूंगा, लेकिन इसे किसी भी प्रोग्रामिंग भाषा या सॉफ्टवेयर इंजीनियरिंग के किसी भी क्षेत्र में लागू किया जा सकता है। तो, सभी बैकएंड एप्लीकेशन में क्या समानता है? आइए एक नज़र डालते हैं! : यदि आप ओओपी (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) से परिचित हैं, तो अपने टेम्प्लेटेड मॉड्यूल को उच्चतम स्तर के अमूर्तन के रूप में मानें, लेकिन पर ताकि इसे इस सिद्धांत के अनुसार लिखा जा सके। नोट एप्लिकेशन स्तर 2. प्रमाणीकरण और प्राधिकरण मैं प्रत्येक अनुभाग को बुनियादी घटकों में विभाजित करना चाहूंगा, जिन्हें लगभग किसी भी बैकएंड एप्लिकेशन पर लागू किया जा सकता है। मौलिक संघटक उपयोगकर्ता का एक प्रतिनिधित्व जिसमें उपयोगकर्ता नाम, पासवर्ड, ईमेल, भूमिकाएं आदि जैसी विशेषताएं शामिल होती हैं। उपयोगकर्ता मॉडल: पासवर्ड को हैश करने और सत्यापित करने के कार्य। पासवर्ड प्रबंधन: टोकन (JWT, OAuth2, आदि) उत्पन्न करने और सत्यापित करने की प्रणाली। टोकन जनरेशन: रूट/एंडपॉइंट्स को सुरक्षित करें जिनके लिए प्रमाणीकरण की आवश्यकता होती है। मिडलवेयर/डेकोरेटर: उन उपयोगकर्ता भूमिकाएँ और अनुमतियाँ निर्दिष्ट करें और सत्यापित करें। भूमिका प्रबंधन: 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 और मूल रूप से, बस इतना ही! आप सभी परियोजनाओं में प्रमाणीकरण के लिए इस पूर्वनिर्धारित कार्यक्षमता का उपयोग कर सकते हैं! 3. भुगतान और बिलिंग लगभग हर एप्लीकेशन वित्तीय लेनदेन को संभालती है। चाहे वह स्थानीय कसाई की दुकान हो या कोई बड़ी उद्यम कंपनी, आपको भुगतान एकत्र करने के लिए एक प्रभावी प्रणाली का उपयोग करने की आवश्यकता होगी। मौलिक संघटक या जैसे भुगतान गेटवे से जुड़ना भुगतान गेटवे एकीकरण: 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 अब, हमने एक जटिल प्रणाली बनाई है जिसे किसी भी परियोजना में एकीकृत किया जा सकता है। क्या आप अभी भी पैटर्न का पालन कर रहे हैं? इसका उपयोग हर जगह किया जा सकता है! आखिरकार, आप इस डेटा के विज़ुअलाइज़ेशन के लिए एक और एप्लिकेशन परिभाषित कर सकते हैं। टेम्प्लेटिंग के बारे में आपकी बात समझ में आ गई! 😉 4. ईमेल और अधिसूचना सेवाएँ ईमेल और नोटिफ़िकेशन उपयोगकर्ताओं को सूचित रखते हैं और उन्हें आपके ऐप के जीवन में व्यस्त रखते हैं। चाहे वह खाता सत्यापन, पासवर्ड रीसेट या मार्केटिंग संचार के लिए हो, किसी भी प्रकार की परियोजना के लिए एक विश्वसनीय ईमेल सेवा आवश्यक है। या जैसी ईमेल सेवाओं से जुड़ना। ईमेल सेवा एकीकरण: 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 परियोजना के अंदर फाइलों की आधार संरचना तैयार करना। यद्यपि सुझाई गई संरचना पायथन कार्यान्वयन के लिए थोड़ी सख्त है, जैसा कि मैंने पहले उल्लेख किया है, आप किसी अन्य भाषा या क्षेत्र के लिए भी ऐसा ही कर सकते हैं। यह भी ध्यान रखना महत्वपूर्ण है कि अमूर्तता के उच्चतम स्तर पर टेम्प्लेटिंग और एप्लिकेशन की अच्छी संरचना बनाए रखना महत्वपूर्ण हो सकता है। अन्य परियोजनाओं के लिए पैकेज के रूप में या माइक्रोसर्विस आर्किटेक्चर के अतिरिक्त के रूप में पुन: उपयोग किया जा सकता है। 5। उपसंहार सब कुछ टेम्पलेट किया जा सकता है! यहाँ दिए गए उदाहरण सिर्फ़ शुरुआत हैं - जैसे-जैसे आपकी परियोजनाएँ विकसित होती हैं, इन पैटर्न को और अधिक जटिल परिदृश्यों को कवर करने के लिए बढ़ाया और परिष्कृत किया जा सकता है। आप जोड़कर , , इंफ्रास्ट्रक्चर, और पाइपलाइन स्थापित कर सकते हैं। caching k8s docker Devops CI/CD एक बार आपने अपना काम ठीक से कर लिया, तो आप उसी काम का उपयोग किसी अन्य काम को पूरा करने के लिए कर सकते हैं। एक सरल कथन याद रखें: इसका लक्ष्य परियोजना, बुनियादी ढांचे, घटकों और सेवाओं को विभिन्न अनुप्रयोगों में पुनः प्रयोज्य बनाना है! अपने लिए एक कप चाय बनाएं और सोचें कि आपके एप्लिकेशन के कौन से हिस्से अलग-अलग ऐप में फिर से इस्तेमाल किए जा सकते हैं। समान सेवाएँ बनाने और अपने काम को स्वचालित करने का प्रयास करें, केवल कुछ कोड टुकड़ों को समायोजित करें! पढ़ने के लिए धन्यवाद, और टेम्पलेटिंग का आनंद लें!