Django 2.1 - Advanced tutorial: How to write reusable apps

उन्नत ट्यूटोरियल: पुन: प्रयोज्य एप्लिकेशन कैसे लिखें




django

उन्नत ट्यूटोरियल: पुन: प्रयोज्य एप्लिकेशन कैसे लिखें

यह उन्नत ट्यूटोरियल शुरू होता है जहां ट्यूटोरियल 7 ने छोड़ा। हम अपने वेब-पोल को एक स्टैंडअलोन पायथन पैकेज में बदल देंगे, जिसे आप नई परियोजनाओं में फिर से उपयोग कर सकते हैं और अन्य लोगों के साथ साझा कर सकते हैं।

यदि आपने हाल ही में ट्यूटोरियल 1-7 पूरा नहीं किया है, तो हम आपको इनकी समीक्षा करने के लिए प्रोत्साहित करते हैं ताकि आपका उदाहरण प्रोजेक्ट नीचे वर्णित एक से मेल खाए।

पुन: प्रयोज्यता मायने रखती है

वेब एप्लिकेशन को डिजाइन, निर्माण, परीक्षण और रखरखाव करना बहुत काम है। कई पायथन और Django प्रोजेक्ट्स आम समस्याओं को साझा करते हैं। क्या यह बहुत अच्छा नहीं होगा अगर हम इस दोहराया काम को बचा सकते हैं?

पायथॉन में पुन: प्रयोज्यता जीवन का तरीका है। पायथन पैकेज इंडेक्स (PyPI) में आपके द्वारा अपने स्वयं के पायथन कार्यक्रमों में उपयोग किए जाने वाले पैकेजों की एक विशाल श्रृंखला है। मौजूदा पुन: प्रयोज्य ऐप्स के लिए Django पैकेज देखें जो आप अपनी परियोजना में शामिल कर सकते हैं। Django खुद भी सिर्फ एक पायथन पैकेज है। इसका मतलब है कि आप मौजूदा पायथन पैकेज या Django ऐप ले सकते हैं और उन्हें अपने वेब प्रोजेक्ट में बना सकते हैं। आपको केवल उन भागों को लिखना होगा जो आपकी परियोजना को अद्वितीय बनाते हैं।

मान लीजिए कि आप एक नया प्रोजेक्ट शुरू कर रहे हैं जिसके लिए हमें जिस ऐप पर काम करना था जैसे चुनाव ऐप की ज़रूरत थी। आप इस ऐप को कैसे पुन: उपयोग कर सकते हैं? सौभाग्य से, आप पहले से ही रास्ते में हैं। ट्यूटोरियल 3 में , हमने देखा कि हम प्रोजेक्ट-लेवल URLconf से पोल का उपयोग कैसे कर सकते include । इस ट्यूटोरियल में, हम एप्लिकेशन को नई परियोजनाओं में उपयोग करना आसान बनाने और दूसरों को स्थापित करने और उपयोग करने के लिए प्रकाशित करने के लिए तैयार करने के लिए और कदम उठाएंगे।

पैकेज? अनुप्रयोग?

एक पायथन package आसान पुन: उपयोग के लिए संबंधित पायथन कोड को समूहीकृत करने का एक तरीका प्रदान करता है। एक पैकेज में पायथन कोड की एक या एक से अधिक फाइलें होती हैं (जिन्हें "मॉड्यूल" के रूप में भी जाना जाता है)।

एक पैकेज import foo.bar साथ या from foo import bar import foo.bar किया जा सकता है। पैकेज बनाने के लिए निर्देशिका (जैसे polls ) के लिए, इसमें एक विशेष फ़ाइल __init__.py होनी चाहिए, भले ही यह फ़ाइल खाली हो।

एक Django आवेदन सिर्फ एक पायथन पैकेज है जो विशेष रूप से एक Django परियोजना में उपयोग के लिए है। कोई एप्लिकेशन सामान्य Django सम्मेलनों का उपयोग कर सकता है, जैसे कि models , tests , urls , और सबमॉड्यूल्स।

बाद में हम पाइथन पैकेज को दूसरों के लिए आसान बनाने की प्रक्रिया का वर्णन करने के लिए पैकेजिंग शब्द का उपयोग करते हैं। यह थोड़ा भ्रमित करने वाला हो सकता है, हम जानते हैं।

आपका प्रोजेक्ट और आपका पुन: प्रयोज्य अनुप्रयोग

पिछले ट्यूटोरियल के बाद, हमारी परियोजना इस तरह दिखनी चाहिए:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        migrations/
            __init__.py
            0001_initial.py
        models.py
        static/
            polls/
                images/
                    background.gif
                style.css
        templates/
            polls/
                detail.html
                index.html
                results.html
        tests.py
        urls.py
        views.py
    templates/
        admin/
            base_site.html

आपने ट्यूटोरियल 7 में mysite/templates और ट्यूटोरियल 3 में polls/templates बनाए। अब शायद यह स्पष्ट हो गया है कि हमने परियोजना और आवेदन के लिए अलग-अलग टेम्प्लेट निर्देशिकाएं क्यों चुनीं: जो कुछ भी चुनाव के आवेदन का हिस्सा है वह चुनावों में है। यह एप्लिकेशन को एक नए प्रोजेक्ट में छोड़ने के लिए आत्म-निहित और आसान बनाता है।

polls निर्देशिका को अब एक नई Django परियोजना में कॉपी किया जा सकता है और तुरंत पुन: उपयोग किया जा सकता है। हालांकि यह प्रकाशित होने के लिए बिल्कुल तैयार नहीं है। उसके लिए, हमें दूसरों को इंस्टॉल करने में आसान बनाने के लिए ऐप को पैकेज करना होगा।

कुछ आवश्यक शर्तें स्थापित कर रहा है

पायथन पैकेजिंग की वर्तमान स्थिति विभिन्न उपकरणों के साथ थोड़ी गड़बड़ है। इस ट्यूटोरियल के लिए, हम अपने पैकेज के निर्माण के लिए setuptools का उपयोग करने जा रहे हैं। यह अनुशंसित पैकेजिंग टूल ( distribute कांटा के साथ विलय) है। हम इसे स्थापित करने और इसकी स्थापना रद्द करने के लिए pip का उपयोग भी करेंगे। अब आपको इन दोनों पैकेजों को स्थापित करना चाहिए। यदि आपको सहायता की आवश्यकता है, तो आप पाइप के साथ Django स्थापित करने का तरीका बता सकते हैं । आप setuptools को उसी तरह से स्थापित कर सकते हैं।

अपने ऐप को पैकेजिंग करें

पायथन पैकेजिंग आपके ऐप को एक विशिष्ट प्रारूप में तैयार करने को संदर्भित करता है जिसे आसानी से स्थापित और उपयोग किया जा सकता है। Django खुद इस तरह से पैक किया जाता है। चुनाव जैसे छोटे ऐप के लिए, यह प्रक्रिया बहुत कठिन नहीं है।

  1. सबसे पहले, अपने Django परियोजना के बाहर, polls लिए एक मूल निर्देशिका बनाएँ। इस निर्देशिका को django-polls

    अपने ऐप के लिए एक नाम चुनना

    अपने पैकेज के लिए नाम चुनते समय, मौजूदा पैकेजों के नामकरण संघर्ष से बचने के लिए PyPI जैसे संसाधनों की जाँच करें। वितरित करने के लिए पैकेज बनाते समय अक्सर अपने मॉड्यूल नाम के लिए django- को प्रस्तुत करना उपयोगी होता है। यह Django ऐप्स की तलाश में अन्य लोगों को आपके ऐप को Django विशिष्ट के रूप में पहचानने में मदद करता है।

    आवेदन लेबल (यानी, पैकेज पैकेज के लिए डॉटेड पथ का अंतिम भाग) INSTALLED_APPS में अद्वितीय होना चाहिए। Django कंट्रीब्यूट पैकेज में से किसी एक के रूप में एक ही लेबल का उपयोग करने से बचें, उदाहरण के लिए, admin , या messages

  2. polls निर्देशिका को django-polls polls निर्देशिका में ले जाएं।
  3. निम्नलिखित सामग्री के साथ एक फ़ाइल django-polls/README.rst बनाएँ:

    =====
    Polls
    =====
    
    Polls is a simple Django app to conduct Web-based polls. For each
    question, visitors can choose between a fixed number of answers.
    
    Detailed documentation is in the "docs" directory.
    
    Quick start
    -----------
    
    1. Add "polls" to your INSTALLED_APPS setting like this::
    
        INSTALLED_APPS = [
            ...
            'polls',
        ]
    
    2. Include the polls URLconf in your project urls.py like this::
    
        path('polls/', include('polls.urls')),
    
    3. Run `python manage.py migrate` to create the polls models.
    
    4. Start the development server and visit http://127.0.0.1:8000/admin/
       to create a poll (you'll need the Admin app enabled).
    
    5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
    
  4. एक django-polls/LICENSE फ़ाइल बनाएँ। लाइसेंस चुनना इस ट्यूटोरियल के दायरे से परे है, लेकिन यह कहना पर्याप्त है कि बिना लाइसेंस के सार्वजनिक रूप से जारी किया गया कोड बेकार है । Django और कई Django- संगत एप्लिकेशन बीएसडी लाइसेंस के तहत वितरित किए जाते हैं; हालाँकि, आप अपना स्वयं का लाइसेंस लेने के लिए स्वतंत्र हैं। बस इस बात से अवगत रहें कि आपकी लाइसेंसिंग पसंद प्रभावित करेगी जो आपके कोड का उपयोग करने में सक्षम है।
  5. आगे हम एक setup.py फ़ाइल बनाएंगे, जो ऐप को बनाने और स्थापित करने के बारे में विवरण प्रदान करती है। इस फ़ाइल की पूरी व्याख्या इस ट्यूटोरियल के दायरे से परे है, लेकिन सेटपूलों डॉक्स की अच्छी व्याख्या है। निम्नलिखित सामग्री के साथ एक फ़ाइल django-polls/setup.py बनाएँ:

    import os
    from setuptools import find_packages, setup
    
    with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
        README = readme.read()
    
    # allow setup.py to be run from any path
    os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
    
    setup(
        name='django-polls',
        version='0.1',
        packages=find_packages(),
        include_package_data=True,
        license='BSD License',  # example license
        description='A simple Django app to conduct Web-based polls.',
        long_description=README,
        url='https://www.example.com/',
        author='Your Name',
        author_email='[email protected]',
        classifiers=[
            'Environment :: Web Environment',
            'Framework :: Django',
            'Framework :: Django :: X.Y',  # replace "X.Y" as appropriate
            'Intended Audience :: Developers',
            'License :: OSI Approved :: BSD License',  # example license
            'Operating System :: OS Independent',
            'Programming Language :: Python',
            'Programming Language :: Python :: 3.5',
            'Programming Language :: Python :: 3.6',
            'Topic :: Internet :: WWW/HTTP',
            'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        ],
    )
    
  6. केवल पायथन मॉड्यूल और पैकेज डिफ़ॉल्ट रूप से पैकेज में शामिल हैं। अतिरिक्त फ़ाइलों को शामिल करने के लिए, हमें एक MANIFEST.in फ़ाइल बनानी होगी। पिछले चरण में निर्दिष्ट सेटटॉप्स डॉक्स इस फाइल पर अधिक विवरण में चर्चा करते हैं। टेम्प्लेट, README.rst और हमारी LICENSE फ़ाइल को शामिल करने के लिए, निम्नलिखित सामग्रियों के साथ एक फ़ाइल django-polls/MANIFEST.in बनाएं:

    include LICENSE
    include README.rst
    recursive-include polls/static *
    recursive-include polls/templates *
    
  7. यह वैकल्पिक है, लेकिन अनुशंसित है, अपने ऐप के साथ विस्तृत प्रलेखन शामिल करने के लिए। भविष्य के प्रलेखन के लिए एक खाली निर्देशिका django-polls/docs बनाएं। django-polls/MANIFEST.in एक अतिरिक्त पंक्ति जोड़ें:

    recursive-include docs *
    

    ध्यान दें कि docs निर्देशिका को आपके पैकेज में तब तक शामिल नहीं किया जाएगा जब तक आप उसमें कुछ फाइलें नहीं जोड़ते। कई Django ऐप भी readthedocs.org जैसी साइटों के माध्यम से अपने दस्तावेज़ ऑनलाइन प्रदान करते हैं।

  8. python setup.py sdist ( django-polls अंदर से भागो) के साथ अपने पैकेज के निर्माण का प्रयास करें। यह django-polls-0.1.tar.gz नामक एक निर्देशिका बनाता है और आपके नए पैकेज, django-polls-0.1.tar.gz

पैकेजिंग के बारे में अधिक जानकारी के लिए, पैकेजिंग और वितरण परियोजनाओं पर पायथन के ट्यूटोरियल देखें।

अपने पैकेज का उपयोग करना

चूंकि हमने polls निर्देशिका को परियोजना से बाहर कर दिया है, इसलिए यह अब काम नहीं कर रहा है। अब हम अपने नए django-polls पैकेज को स्थापित करके इसे ठीक करेंगे।

एक उपयोगकर्ता पुस्तकालय के रूप में स्थापित करना

निम्न चरण django-polls को एक उपयोगकर्ता लाइब्रेरी के रूप में स्थापित करते हैं। पैकेज सिस्टम-वाइड को स्थापित करने पर प्रति-उपयोगकर्ता इंस्टॉल करने के बहुत सारे फायदे हैं, जैसे कि सिस्टम पर प्रयोग करने योग्य होना जहाँ आपके पास व्यवस्थापक पहुँच नहीं है और साथ ही पैकेज को सिस्टम सेवाओं और मशीन के अन्य उपयोगकर्ताओं को प्रभावित करने से रोकता है।

ध्यान दें कि प्रति-उपयोगकर्ता इंस्टॉलेशन अभी भी उस उपयोगकर्ता के रूप में चलने वाले सिस्टम टूल के व्यवहार को प्रभावित कर सकता है, इसलिए virtualenv एक अधिक मजबूत समाधान है (नीचे देखें)।

  1. पैकेज को स्थापित करने के लिए, पाइप का उपयोग करें (आपने पहले से ही इसे स्थापित किया है , ठीक है?):

    pip install --user django-polls/dist/django-polls-0.1.tar.gz
    
  2. भाग्य के साथ, आपके Django परियोजना को अब फिर से सही ढंग से काम करना चाहिए। इसकी पुष्टि के लिए सर्वर को फिर से चलाएँ।
  3. पैकेज की स्थापना रद्द करने के लिए, पाइप का उपयोग करें:

    pip uninstall django-polls
    

अपना ऐप प्रकाशित करना

अब जब हमने django-polls और परीक्षण किया है, तो यह दुनिया के साथ साझा करने के लिए तैयार है! यदि यह सिर्फ एक उदाहरण नहीं था, तो आप अब कर सकते हैं:

Virtualenv के साथ पायथन पैकेज स्थापित करना

इससे पहले, हमने एक उपयोगकर्ता पुस्तकालय के रूप में चुनाव ऐप स्थापित किया था। इसके कुछ नुकसान हैं:

  • उपयोगकर्ता पुस्तकालयों को संशोधित करना आपके सिस्टम पर अन्य पायथन सॉफ़्टवेयर को प्रभावित कर सकता है।
  • आप इस पैकेज (या उसी नाम के अन्य) के कई संस्करण नहीं चला पाएंगे।

आमतौर पर, ये स्थितियां केवल एक बार उत्पन्न होती हैं जब आप कई Django परियोजनाओं को बनाए रखते हैं। जब वे करते हैं, तो virtualenv का उपयोग करने का सबसे अच्छा समाधान है। यह उपकरण आपको कई अलग-थलग पाइथन वातावरण को बनाए रखने की अनुमति देता है, प्रत्येक में पुस्तकालयों और पैकेज नामस्थान की अपनी प्रति है।