क्या Reflex फुल-स्टैक वेब ऐप्स के लिए सबसे बेहतरीन Python Framework है?

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00क्या आप पायथन के जबर्दस्त प्रशंसक हैं? मेरा मतलब है, क्या आप ऐसे व्यक्ति हैं जो सिर्फ पायथन कोड लिखना चाहते हैं
00:00:05और कुछ नहीं? अगर ऐसा है, तो मेरे पास आपके लिए एकदम सही चीज़ है। यह एक फ्रेमवर्क है जिसका नाम है
00:00:11Reflex और इसका लक्ष्य फुल-स्टैक पायथन कोड को प्रोडक्शन-रेडी वेब एप्लिकेशन
00:00:17में बदलने की बाधाओं और जटिलता को दूर करना है। इस वीडियो में, हम देखेंगे कि
00:00:22Reflex क्या है, यह कैसे काम करता है, और देखते हैं कि इसकी इतनी चर्चा क्यों है।
00:00:30तो Reflex जो मुख्य समस्या हल करने की कोशिश कर रहा है, वह है पायथन डेवलपर्स के लिए एक
00:00:36पूरी तरह से अलग स्टैक सीखने की मजबूरी, जिसमें जावास्क्रिप्ट, रिएक्ट, राउटिंग और बंडलर्स शामिल हैं, ताकि वे
00:00:43अपने कोड के लिए एक कार्यात्मक वेब इंटरफ़ेस बना सकें। Reflex डेवलपर्स को 100% शुद्ध पायथन में
00:00:50फुल-स्टैक ऐप बनाने की सुविधा देता है, ताकि आप बिना किसी रुकावट के पूरे स्टैक के लिए सिर्फ एक भाषा पर ध्यान केंद्रित कर सकें।
00:00:56उनका दावा यह भी है कि लॉन्च के बाद से डेवलपर्स ने इस फ्रेमवर्क के साथ 10 लाख से अधिक ऐप बनाए हैं
00:01:03और 30% फॉर्च्यून 500 कंपनियां अपने इंटरनल टूल्स के लिए इसका इस्तेमाल कर रही हैं।
00:01:10और हाल ही में, वे AI पर काफी ज़ोर दे रहे हैं और उन्होंने “Reflex Build” नामक एक टूल लॉन्च किया है,
00:01:15जो मूल रूप से आपको एक ही प्रॉम्प्ट से अपना ऐप बनाने की सुविधा देता है।
00:01:21साथ ही, वे अन्य SDK और टूल्स के लिए इंटीग्रेशन का समर्थन करते हैं जिससे आप अपने ऐप को
00:01:26Databricks, Okta, Stripe, AWS जैसी अन्य लोकप्रिय सेवाओं से आसानी से जोड़ सकते हैं। अब यह सब सुनने में तो प्रभावशाली लगता है,
00:01:34लेकिन मैं खुद इसे आज़माना चाहता हूँ और देखना चाहता हूँ कि यह कोड असल में कैसे काम करता है।
00:01:40चलिए एक नई डायरेक्टरी, ReflexTest बनाने से शुरू करते हैं, और फिर उसमें cd करते हैं। यहाँ से,
00:01:44डॉक्युमेंटेशन कहता है कि हम अपने Reflex प्रोजेक्ट को शुरू करने के लिए ये तीन कमांड चला सकते हैं। तो चलिए
00:01:48pip install reflex और फिर reflex init चलाकर शुरू करते हैं। और यहाँ हमें उनके
00:01:53टेम्पलेट्स में से किसी एक को चुनने का विकल्प मिलता है। लेकिन इस डेमो के लिए, हम इसे सरल रखेंगे और ब्लैंक Reflex ऐप विकल्प चुनेंगे।
00:01:57एक बार यह हो जाने के बाद, हम प्रोजेक्ट को अपने कोड एडिटर में खोल सकते हैं। और अगर हम
00:02:02reflex test फोल्डर खोलें, तो यहाँ reflex_test.py फ़ाइल में हमारा पूरा ऐप रहता है। हम देख सकते हैं कि
00:02:09इसमें एक RX कंपोनेंट सेक्शन और एक स्टेट क्लास है। अपना ऐप लॉन्च करने के लिए टर्मिनल में Reflex Build चलाते हैं।
00:02:15और यह पोर्ट 3000 पर हमारा ऐप शुरू कर देता है। और हम ब्राउज़र में इसका परिणाम देख सकते हैं।
00:02:20तो अब देखते हैं कि Reflex स्टेट को कैसे मैनेज करता है। हम एक साधारण काउंट वेरिएबल जोड़ने से शुरू कर सकते हैं।
00:02:25और इस वैल्यू को बदलने के लिए, हमें एक फंक्शन भी परिभाषित करना होगा जो ऐसा करेगा। तो
00:02:29काउंट वेरिएबल के नीचे, हम एक इंक्रीमेंट फंक्शन बना सकते हैं जो काउंट को एक से बढ़ा देगा। और
00:02:34इसके ऊपर RX इवेंट डेकोरेटर जोड़ने की सलाह दी जाती है, जो स्टेटिक टाइप चेकिंग को सक्षम बनाता है और
00:02:39यह सुनिश्चित करता है कि इवेंट हैंडलर्स को सही संख्या और प्रकार के तर्क मिलें। और फिर हम
00:02:44RX कंपोनेंट के रिटर्न स्टेटमेंट में एक साधारण बटन जोड़ सकते हैं। यह हमें टेक्स्ट फील्ड में काउंट दिखाएगा
00:02:48और क्लिक करने पर इंक्रीमेंट फंक्शन को ट्रिगर करेगा। Reflex हॉट रिलोडिंग को सपोर्ट करता है। तो अगर
00:02:53हम अब फ़ाइल को सेव करते हैं और ब्राउज़र खोलते हैं, तो हमें अपना काउंट बटन दिखाई देता है जो हर बार दबाने पर वैल्यू को बढ़ाता है।
00:02:58अब चलिए कुछ और दिलचस्प आज़माते हैं। चलिए अपने स्टेट में आइटम्स की एक एरे बनाते हैं।
00:03:02और सिद्धांत रूप में, हमें इस इनलाइन फॉर लूप के द्वारा इन आइटम्स को लिस्ट के रूप में रेंडर करने में सक्षम होना चाहिए।
00:03:08लेकिन यह काम नहीं करेगा क्योंकि यह वैल्यू कंपाइल टाइम पर ज्ञात नहीं है। देखिए,
00:03:13Reflex के काम करने का तरीका यह है कि जब आप अपना ऐप चलाते हैं, तो फ्रंट एंड जावास्क्रिप्ट कोड में कंपाइल हो जाता है
00:03:18जो ब्राउज़र में चलता है, जिसे Reflex की शब्दावली में कंपाइल टाइम कहा जाता है। बैक एंड पायथन में ही रहता है
00:03:23और ऐप के चलने के दौरान सर्वर पर चलता है। और इसे Reflex की शब्दावली में रनटाइम कहा जाता है।
00:03:27इसलिए हम अपने कंपोनेंट रेंडर में शुद्ध पायथन फॉर लूप नहीं चला सकते, लेकिन हम कंपोनेंट रेंडर ब्लॉक के बाहर शुद्ध पायथन ऑपरेशंस कर सकते हैं।
00:03:32लेकिन हम कंपोनेंट ब्लॉक में आइटम्स को लूप कैसे करें? खैर, इस मामले के लिए, हमें एक सरल रेंडर आइटम फंक्शन
00:03:37परिभाषित करना होगा जो हमारे आइटम को इस तरह रेंडर करेगा। और फिर हमें कंपोनेंट रेंडर ब्लॉक में
00:03:42फॉर लूप करने के लिए RxForEach फंक्शन का उपयोग करना होगा। और अब हम अपने आइटम्स को ऐप पर ठीक से रेंडर होते हुए देखते हैं।
00:03:47यही बात कंडीशनल रेंडरिंग पर भी लागू होती है। हम रिटर्न ब्लॉक में इस तरह सामान्य if-else स्टेटमेंट का उपयोग नहीं कर सकते।
00:03:53इसके बजाय, हमें इस तरह RxConditional फंक्शन का उपयोग करना होगा। और अगर हम अब बटन को पाँच
00:03:58से अधिक बार क्लिक करते हैं, तो हमें अपने ऐप पर टेक्स्ट दिखाई देगा। आखिरी चीज़ जो देखनी है वह यह है कि
00:04:02हम डेटा कैसे फ़ेच और रेंडर कर सकते हैं। इस डेमो के लिए, चलिए रैंडम यूज़लेस फैक्ट्स API से एक रैंडम फैक्ट
00:04:08फ़ेच करते हैं और इसे टेक्स्ट बॉक्स में दिखाते हैं। सबसे पहले, एक बुलियन वेरिएबल जोड़ते हैं जो यह बताएगा कि क्या हमारा
00:04:12डेटा फ़ेच हो रहा है, और एक साधारण खाली स्ट्रिंग जो हमारे फैक्ट को होल्ड करेगी। और फिर हम एक
00:04:17एसिंक्रोनस डेटा फ़ेचिंग फंक्शन बना सकते हैं जो डेटा फ़ेचिंग को ट्रू (true) पर सेट करेगा। और फिर यह
00:04:22HTTPX लाइब्रेरी का उपयोग करके हमारा रैंडम फैक्ट फ़ेच करेगा और उसे हमारे फैक्ट स्टेट वेरिएबल में स्टोर करेगा।
00:04:27और मैं asyncio के साथ एक सेकंड की देरी भी जोड़ रहा हूँ ताकि हम असल में रियल टाइम में डेटा फ़ेचिंग देख सकें।
00:04:33ऑपरेशन पूरा होने के बाद, हम डेटा फ़ेचिंग बुलियन को वापस फॉल्स (false) पर सेट कर देते हैं। और ध्यान दें कि कैसे हमने यहाँ
00:04:38यील्ड (yield) ऑपरेशन जोड़ा है। इसलिए जब भी हम किसी इवेंट हैंडलर में UI को कई बार अपडेट करना चाहते हैं,
00:04:43तो रेंडरर को अपडेट भेजने के लिए हम यील्ड का उपयोग कर सकते हैं। तो इस मामले में, जैसे ही
00:04:48डेटा फ़ेचिंग बदलता है, हम चाहते हैं कि हमारा UI उस बदलाव को दिखाए। और ऊपर HTTPX और asyncio इम्पोर्ट्स
00:04:52जोड़ना न भूलें। और अंत में, हमारे रेंडर फंक्शन में, हम वर्तमान स्थिति के आधार पर
00:04:57लोडिंग स्पिनर या फैक्ट दिखाने के लिए एक साधारण RX कंडीशनल फंक्शन का उपयोग कर सकते हैं। और अगर हम
00:05:03चाहते हैं कि यह फंक्शन पेज लोड होने पर हर बार ट्रिगर हो, तो हमें अपने RX कंपोनेंट के लिए एक डेकोरेटर जोड़ना होगा
00:05:08जो पेज लोड होने पर हमारे फ़ेच डेटा फंक्शन को ट्रिगर करेगा। और अब अगर हम अपना पेज रिलोड करते हैं, तो हम
00:05:12देख सकते हैं कि रैंडम फैक्ट फ़ेच होकर पेज पर रेंडर हो रहा है। आखिरी चीज़ जो मैं यहाँ करना चाहता हूँ
00:05:18वह है .web फोल्डर को देखना। जैसा कि हम यहाँ देख सकते हैं, हमने जो कुछ भी लिखा है वह बैकग्राउंड में
00:05:22एक रिएक्ट ऐप में कंपाइल और रेंडर किया जाता है, जो अपने अंदर Vite और Tailwind का उपयोग करता है। और यहाँ तक कि
00:05:27इसके रूट हैंडलिंग के लिए रिएक्ट राउटर भी है। और ईमानदारी से कहूँ तो, जैसे ही मैंने इसे देखा, मैं बहुत
00:05:33निराश हुआ। मुझे लगा कि उन्होंने कोई कस्टम जावास्क्रिप्ट कंपाइलर या कुछ मौलिक बनाया है।
00:05:38लेकिन इसका मतलब सिर्फ इतना है कि Reflex रिएक्ट के ऊपर एक और एब्स्ट्रैक्शन लेयर है। इसलिए Reflex को लेकर मेरे
00:05:42मिले-जुले विचार हैं। एक तरफ, एक सिंगल पायथन फुल-स्टैक फ्रेमवर्क का विचार वाकई शानदार है जो आपको
00:05:47सब कुछ शुद्ध पायथन में लिखने देता है। लेकिन यह जानकर बहुत निराशा हुई कि इसके अंदरूनी हिस्से में,
00:05:53यह सिर्फ एक रिएक्ट ऐप को रैप कर रहा है और नेटिव पायथन का उपयोग नहीं कर रहा है। यह इसे और भी
00:05:59जटिल बना देता है, क्योंकि अब आप एक नया आर्किटेक्चर सीखने और यह समझने के लिए मजबूर हैं कि
00:06:05Reflex स्टेट मैनेजमेंट को कैसे संभालता है, उन सभी विशेष मामलों (edge cases) की तो बात ही छोड़ दीजिए जो आ सकते हैं,
00:06:11इससे बेहतर है कि आप रिएक्ट के साथ ही बने रहें क्योंकि यह एक परखा हुआ और ठोस फ्रेमवर्क है। इसलिए अगर मुझे
00:06:16पायथन बैकएंड वाला कोई प्रोजेक्ट बनाना हो, तो मैं अभी भी अपने फ्रंटएंड के लिए जावास्क्रिप्ट फ्रेमवर्क का ही उपयोग करूँगा।
00:06:22Reflex मुझे पूरी तरह से पायथन फुल-स्टैक पर जाने के लिए मना नहीं पाया। लेकिन ये बस मेरी अपनी राय है। आप
00:06:28Reflex के बारे में क्या सोचते हैं? क्या आपको इस तरह के फुल-स्टैक पायथन फ्रेमवर्क का विचार पसंद है?
00:06:34मैं वाकई जानना चाहता हूँ कि आप क्या सोचते हैं। और दोस्तों, अगर आपको यह वीडियो पसंद आया हो, तो
00:06:39वीडियो के नीचे उस लाइक बटन को दबाकर हमें ज़रूर बताएं। और हमारे चैनल को सब्सक्राइब करना न भूलें।
00:06:44Better Stack से मैं हूँ Andris, और मैं आपसे अगले वीडियो में मिलूँगा।
00:06:50This has been Andris from better stack and I will see you in the next videos.

Key Takeaway

Reflex पायथन प्रेमियों के लिए फुल-स्टैक विकास को सरल तो बनाता है, लेकिन अंततः यह रिएक्ट पर आधारित एक एब्स्ट्रैक्शन है जो जटिल प्रोजेक्ट्स के लिए चुनौतियाँ पैदा कर सकता है।

Highlights

Reflex एक ऐसा पायथन फ्रेमवर्क है जो डेवलपर्स को बिना जावास्क्रिप्ट या रिएक्ट सीखे 100% शुद्ध पायथन में फुल-स्टैक वेब ऐप बनाने की अनुमति देता है।

यह फ्रेमवर्क 'Reflex Build' जैसे AI टूल और Databricks, Stripe और AWS जैसी लोकप्रिय सेवाओं के साथ आसान इंटीग्रेशन प्रदान करता है।

Reflex में 'स्टेट मैनेजमेंट' और 'हॉट रिलोडिंग' जैसी सुविधाएँ शामिल हैं, जो विकास प्रक्रिया को तेज़ और आसान बनाती हैं।

विडंबना यह है कि Reflex पर्दे के पीछे पायथन कोड को रिएक्ट, विट (Vite) और टेलविंड (Tailwind) में कंपाइल करता है।

वीडियो के अंत में विश्लेषक का मानना है कि रिएक्ट के ऊपर एक और एब्स्ट्रैक्शन लेयर होने के कारण, अनुभवी डेवलपर्स के लिए मूल रिएक्ट का उपयोग करना ही बेहतर हो सकता है।

Timeline

Reflex फ्रेमवर्क का परिचय और इसकी लोकप्रियता

वीडियो की शुरुआत Reflex फ्रेमवर्क के परिचय से होती है, जो विशेष रूप से उन पायथन डेवलपर्स के लिए बनाया गया है जो जावास्क्रिप्ट नहीं सीखना चाहते। यह टूल जटिल वेब विकास बाधाओं को दूर करके पायथन कोड को प्रोडक्शन-रेडी ऐप्स में बदलने का वादा करता है। वक्ता बताते हैं कि 30% फॉर्च्यून 500 कंपनियाँ पहले से ही अपने आंतरिक टूल्स के लिए इसका उपयोग कर रही हैं। इसके अलावा, Reflex Build जैसे नए AI फीचर्स और विभिन्न SDK इंटीग्रेशन इसे और भी शक्तिशाली बनाते हैं। यह खंड यह समझने के लिए महत्वपूर्ण है कि यह फ्रेमवर्क बाजार में क्यों चर्चा का विषय बना हुआ है।

प्रोजेक्ट सेटअप और बेसिक कोडिंग का डेमो

इस भाग में वक्ता 'ReflexTest' नाम से एक नई डायरेक्टरी बनाकर प्रैक्टिकल कोडिंग का प्रदर्शन करते हैं। वे 'pip install reflex' और 'reflex init' जैसे कमांड्स का उपयोग करके एक बुनियादी ब्लैंक ऐप सेटअप करने की प्रक्रिया दिखाते हैं। यहाँ मुख्य रूप से 'reflex_test.py' फ़ाइल पर ध्यान केंद्रित किया गया है जहाँ पूरा ऐप कोड स्थित होता है। टर्मिनल में 'Reflex Build' चलाकर पोर्ट 3000 पर ऐप को सफलतापूर्वक लॉन्च किया जाता है। यह तकनीकी प्रदर्शन दिखाता है कि एक नया प्रोजेक्ट शुरू करना कितना सीधा और सरल है।

स्टेट मैनेजमेंट और इवेंट हैंडलिंग

यहाँ Reflex में स्टेट मैनेजमेंट (State Management) की कार्यप्रणाली को विस्तार से समझाया गया है। वक्ता एक साधारण 'काउंट वेरिएबल' और उसे बढ़ाने के लिए एक 'इंक्रीमेंट फंक्शन' बनाकर दिखाते हैं। 'RX इवेंट डेकोरेटर' का उपयोग करके टाइप चेकिंग सुनिश्चित की जाती है, जो कोडिंग के दौरान गलतियों को कम करता है। वीडियो में 'हॉट रिलोडिंग' की सुविधा भी दिखाई गई है, जिससे कोड सेव करते ही ब्राउज़र में बदलाव तुरंत दिखने लगते हैं। यह खंड डेवलपर्स को यह समझने में मदद करता है कि ऐप के डेटा और यूजर इंटरैक्शन को कैसे नियंत्रित किया जाए।

कंपाइल टाइम बनाम रनटाइम और कंडीशनल रेंडरिंग

यह एक तकनीकी खंड है जहाँ कंपाइल टाइम (फ्रंटएंड जावास्क्रिप्ट) और रनटाइम (बैकएंड पायथन) के बीच के अंतर को स्पष्ट किया गया है। वक्ता बताते हैं कि आप कंपोनेंट ब्लॉक के अंदर सीधे पायथन के 'for' लूप या 'if-else' का उपयोग नहीं कर सकते। इसके बजाय, Reflex के विशेष फंक्शन्स जैसे 'RxForEach' और 'RxConditional' का उपयोग करना अनिवार्य है। यह सीमा इसलिए है क्योंकि फ्रंटएंड अंततः जावास्क्रिप्ट में बदल जाता है जिसे ब्राउज़र समझ सके। यह जानकारी उन डेवलपर्स के लिए महत्वपूर्ण है जो शुद्ध पायथन तर्क को फ्रंटएंड में लागू करना चाहते हैं।

API से डेटा फ़ेच करना और रीयल-टाइम अपडेट

इस अनुभाग में 'रैंडम यूज़लेस फैक्ट्स API' का उपयोग करके बाहरी डेटा प्राप्त करने का तरीका दिखाया गया है। वक्ता 'HTTPX' लाइब्रेरी और 'asyncio' का उपयोग करके एक एसिंक्रोनस डेटा फ़ेचिंग फंक्शन बनाते हैं। यहाँ 'yield' कीवर्ड के महत्व को समझाया गया है, जो UI को रीयल-टाइम में अपडेट भेजने के लिए उपयोग किया जाता है। पेज लोड होते ही डेटा दिखाने के लिए एक विशेष डेकोरेटर का उपयोग किया जाता है जो लोडिंग स्पिनर को ट्रिगर करता है। यह जटिल वेब ऑपरेशंस को पायथन के माध्यम से संभालने की क्षमता को प्रमाणित करता है।

आंतरिक संरचना का खुलासा और अंतिम निष्कर्ष

अंतिम भाग में वक्ता '.web' फोल्डर की जांच करते हैं और यह जानकर निराश होते हैं कि Reflex वास्तव में रिएक्ट, विट और टेलविंड के ऊपर सिर्फ एक परत है। उनका तर्क है कि एक नया आर्किटेक्चर और स्टेट मैनेजमेंट सिस्टम सीखने के बजाय, सीधे रिएक्ट का उपयोग करना अधिक विश्वसनीय हो सकता है। वक्ता का मानना है कि हालांकि विचार अच्छा है, लेकिन यह उन्हें पूरी तरह से पायथन पर स्विच करने के लिए राजी नहीं कर पाया। वे दर्शकों से उनकी राय मांगते हुए वीडियो को समाप्त करते हैं। यह खंड फ्रेमवर्क की कमियों और व्यावहारिक उपयोगिता पर एक ईमानदार राय प्रदान करता है।

Community Posts

View all posts