Django 2.1 - Writing your first Django app, part 1

अपना पहला Django ऐप लिखना, भाग 1




django

अपना पहला Django ऐप लिखना, भाग 1

आइए उदाहरण के द्वारा जानें।

इस ट्यूटोरियल के दौरान, हम आपको एक मूल पोल एप्लिकेशन के निर्माण के माध्यम से चलेंगे।

इसमें दो भाग शामिल होंगे:

  • एक सार्वजनिक साइट जो लोगों को चुनाव देखने और उनमें मतदान करने देती है।
  • एक व्यवस्थापक साइट जो आपको चुनाव जोड़ने, बदलने और हटाने देती है।

हम मान लेंगे कि आपके पास Django पहले से ही स्थापित है । आप बता सकते हैं कि Django इंस्टॉल किया गया है और शेल प्रॉम्प्ट में ($ उपसर्ग द्वारा दर्शाया गया है) निम्न कमांड चलाकर कौन सा संस्करण है:

$ python -m django --version
...\> py -m django --version

यदि Django स्थापित है, तो आपको अपनी स्थापना का संस्करण देखना चाहिए। यदि ऐसा नहीं है, तो आपको "django नाम का कोई मॉड्यूल नहीं" बताने में त्रुटि होगी।

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

Django के पुराने संस्करणों को हटाने के बारे में सलाह के लिए Django स्थापित करने का तरीका देखें और एक नया स्थापित करें।

सहायता कहां से प्राप्त करें:

यदि आपको इस ट्यूटोरियल से गुजरने में परेशानी हो रही है, तो कृपया django-users को संदेश पोस्ट करें या #django द्वारा irc.freenode.net पर ड्रॉप करें ताकि अन्य Django उपयोगकर्ताओं के साथ चैट कर सकें जो मदद करने में सक्षम हो सकते हैं।

एक परियोजना का निर्माण

यदि यह Django का उपयोग करते हुए पहली बार है, तो आपको कुछ प्रारंभिक सेटअप का ध्यान रखना होगा। अर्थात्, आपको कुछ कोड को ऑटो-जनरेट करने की आवश्यकता होगी जो एक Django project स्थापित करता है - डेटाबेस कॉन्फ़िगरेशन, Django- विशिष्ट विकल्प और एप्लिकेशन-विशिष्ट सेटिंग्स सहित Django के उदाहरण के लिए सेटिंग्स का एक संग्रह।

कमांड लाइन से, cd एक डायरेक्टरी में जहाँ आप अपना कोड स्टोर करना चाहते हैं, फिर निम्न कमांड चलाएँ:

$ django-admin startproject mysite
...\> django-admin startproject mysite

यह आपकी वर्तमान निर्देशिका में एक mysite निर्देशिका बनाएगा। यदि यह काम नहीं करता है, समस्याओं को django-admin चल रहा देखें।

ध्यान दें

अंतर्निहित पायथन या Django घटकों के बाद आपको नामकरण परियोजनाओं से बचने की आवश्यकता होगी। विशेष रूप से, इसका मतलब है कि आपको django (जो खुद Django के साथ संघर्ष करेगा) या test (जो एक अंतर्निहित पायथन पैकेज के साथ संघर्ष करता है) जैसे नामों का उपयोग करने से बचना चाहिए।

यह कोड कहां रहना चाहिए?

यदि आपकी पृष्ठभूमि सादे पुराने PHP (आधुनिक चौखटे के उपयोग के साथ) में है, तो आप शायद वेब सर्वर के दस्तावेज़ रूट (जैसे /var/www जैसी जगह में) के तहत कोड डालने के लिए उपयोग किए जाते हैं। Django के साथ, आप ऐसा नहीं करते हैं। अपने वेब सर्वर के दस्तावेज़ रूट में किसी भी पायथन कोड को रखना अच्छा नहीं है, क्योंकि यह इस संभावना को जोखिम में डाल देता है कि लोग आपके कोड को वेब पर देखने में सक्षम हो सकते हैं। यह सुरक्षा के लिए अच्छा नहीं है।

अपना कोड डॉक्यूमेंट रूट के बाहर कुछ निर्देशिका में रखें, जैसे कि /home/mycode

आइए देखें कि क्या startproject बनाया:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

ये फाइलें हैं:

  • बाहरी mysite/ रूट डायरेक्टरी आपकी परियोजना के लिए सिर्फ एक कंटेनर है। इसका नाम Django के लिए कोई फर्क नहीं पड़ता; आप इसे अपनी पसंद की किसी भी चीज़ में बदल सकते हैं।
  • manage.py : एक कमांड-लाइन उपयोगिता जो आपको इस Django परियोजना के साथ विभिन्न तरीकों से बातचीत करने देती है। आप django-admin और manage.py में manage.py बारे में सभी विवरण पढ़ सकते हैं।
  • आंतरिक mysite/ निर्देशिका आपकी परियोजना के लिए वास्तविक पायथन पैकेज है। इसका नाम पायथन पैकेज नाम है जिसे आपको इसके अंदर कुछ भी आयात करने के लिए उपयोग करना होगा (जैसे mysite.urls )।
  • mysite/__init__.py : एक खाली फ़ाइल जो पायथन को बताती है कि इस निर्देशिका को पायथन पैकेज माना जाना चाहिए। यदि आप एक पायथन शुरुआत कर रहे हैं, तो आधिकारिक पायथन डॉक्स में संकुल के बारे में अधिक पढ़ें।
  • mysite/settings.py : इस Django परियोजना के लिए सेटिंग्स / कॉन्फ़िगरेशन। Django सेटिंग्स आपको बताएंगी कि सेटिंग्स कैसे काम करती हैं।
  • mysite/urls.py : इस Django परियोजना के लिए URL घोषणाएँ; आपके Django संचालित साइट की एक "सामग्री की तालिका"। आप URL प्रेषण में URL के बारे में अधिक पढ़ सकते हैं।
  • mysite/wsgi.py : mysite/wsgi.py संगत वेब सर्वर के लिए एक प्रविष्टि-बिंदु जो आपकी परियोजना की सेवा करता है। अधिक विवरण के लिए डब्ल्यूएसजीआई के साथ कैसे तैनात करें देखें।

विकास सर्वर

आइए अपने Django प्रोजेक्ट कार्यों को सत्यापित करें। यदि आप पहले से ही नहीं हैं, तो बाहरी mysite निर्देशिका में बदलें, और निम्न कमांड चलाएं:

$ python manage.py runserver
...\> py manage.py runserver

आप कमांड लाइन पर निम्न आउटपुट देखेंगे:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

August 18, 2018 - 15:50:53
Django version 2.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ध्यान दें

अभी के लिए अनपेक्षित डेटाबेस माइग्रेशन के बारे में चेतावनी को अनदेखा करें; हम शीघ्र ही डेटाबेस से निपटेंगे।

आपने Django डेवलपमेंट सर्वर, एक लाइटवेट वेब सर्वर शुरू किया है, जो कि शुद्ध रूप से पायथन में लिखा गया है। हमने इसे Django के साथ शामिल किया है ताकि आप तेजी से चीजों को विकसित कर सकें, बिना उत्पादन सर्वर को कॉन्फ़िगर किए बिना - जैसे अपाचे - जब तक आप उत्पादन के लिए तैयार नहीं होते।

अब नोट करने का एक अच्छा समय है: उत्पादन वातावरण के समान इस सर्वर का उपयोग करें। यह केवल विकास करते समय उपयोग के लिए अभिप्रेत है। (हम वेब सर्वर बनाने के व्यवसाय में हैं, वेब सर्वर के नहीं।)

अब जब सर्वर चल रहा है, तो अपने वेब ब्राउजर से http://127.0.0.1:8000/ जाएं। आपको एक "बधाई!" पृष्ठ दिखाई देगा, जिसमें एक रॉकेट बंद है। इसने काम कर दिया!

पोर्ट बदलना

डिफ़ॉल्ट रूप से, runserver कमांड पोर्ट 8000 पर आंतरिक आईपी पर विकास सर्वर शुरू करता है।

यदि आप सर्वर के पोर्ट को बदलना चाहते हैं, तो इसे कमांड-लाइन तर्क के रूप में पास करें। उदाहरण के लिए, यह कमांड पोर्ट 8080 पर सर्वर शुरू करता है:

$ python manage.py runserver 8080
...\> py manage.py runserver 8080

यदि आप सर्वर का आईपी बदलना चाहते हैं, तो इसे पोर्ट के साथ पास करें। उदाहरण के लिए, सभी उपलब्ध सार्वजनिक IP पर सुनने के लिए (जो कि यदि आप Vagrant चला रहे हैं या नेटवर्क पर अन्य कंप्यूटरों पर अपना काम दिखाना चाहते हैं तो उपयोगी है), का उपयोग करें:

$ python manage.py runserver 0:8000
...\> py manage.py runserver 0:8000

0 0.0.0.0 के लिए एक शॉर्टकट है। विकास सर्वर के लिए पूर्ण डॉक्स runserver संदर्भ में पाए जा सकते हैं।

runserver स्वचालित लोडिंग

विकास सर्वर आवश्यकतानुसार प्रत्येक अनुरोध के लिए पायथन कोड को स्वचालित रूप से पुनः लोड करता है। आपको प्रभावी होने के लिए कोड परिवर्तन के लिए सर्वर को पुनरारंभ करने की आवश्यकता नहीं है। हालाँकि, कुछ कार्रवाइयाँ जैसे कि फ़ाइलें जोड़ना पुनरारंभ करना ट्रिगर नहीं करता है, इसलिए आपको इन मामलों में सर्वर को पुनरारंभ करना होगा।

पोल एप्लिकेशन बनाना

अब जब आपका वातावरण - एक "प्रोजेक्ट" - सेट हो गया है, तो आप काम करना शुरू करने के लिए तैयार हैं।

Django में आपके द्वारा लिखे गए प्रत्येक एप्लिकेशन में एक पायथन पैकेज होता है जो एक निश्चित सम्मेलन का अनुसरण करता है। Django एक उपयोगिता के साथ आता है जो स्वचालित रूप से एक ऐप की मूल निर्देशिका संरचना उत्पन्न करता है, इसलिए आप निर्देशिका बनाने के बजाय कोड लिखने पर ध्यान केंद्रित कर सकते हैं।

परियोजनाओं बनाम क्षुधा

प्रोजेक्ट और ऐप में क्या अंतर है? एक ऐप एक वेब एप्लिकेशन है जो कुछ करता है - जैसे, एक वेबलॉग सिस्टम, सार्वजनिक रिकॉर्ड का एक डेटाबेस या एक साधारण पोल ऐप। एक परियोजना एक विशेष वेबसाइट के लिए कॉन्फ़िगरेशन और एप्लिकेशन का एक संग्रह है। एक प्रोजेक्ट में कई ऐप्स हो सकते हैं। एक ऐप कई प्रोजेक्ट्स में हो सकता है।

आपके ऐप आपके पायथन पथ पर कहीं भी रह सकते हैं। इस ट्यूटोरियल में, हम आपके manage.py फ़ाइल के ठीक बगल में हमारा पोल ऐप बनाएंगे, ताकि इसे mysite के mysite बजाय अपने स्वयं के शीर्ष-स्तरीय मॉड्यूल के रूप में आयात किया जा सके।

अपना एप्लिकेशन बनाने के लिए, सुनिश्चित करें कि आप manage.py निर्देशिका के समान हैं और यह कमांड टाइप करें:

$ python manage.py startapp polls
...\> py manage.py startapp polls

यह एक निर्देशिका polls बनाएगा, जो इस तरह से निर्धारित किया गया है:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

इस निर्देशिका संरचना में पोल ​​एप्लिकेशन का उपयोग किया जाएगा।

अपना पहला दृश्य लिखें

पहला दृश्य लिखिए। फ़ाइल का polls/views.py खोलें और उसमें निम्न पायथन कोड डालें:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

यह Django में संभव सबसे सरल दृश्य है। दृश्य को कॉल करने के लिए, हमें इसे URL में मैप करना होगा - और इसके लिए हमें URLconf की आवश्यकता होगी।

चुनाव निर्देशिका में URLconf बनाने के लिए, urls.py नामक एक फ़ाइल बनाएँ। आपकी एप्लिकेशन निर्देशिका अब इस तरह दिखनी चाहिए:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

polls/urls.py फ़ाइल में निम्न कोड शामिल हैं:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

अगला कदम polls.urls मॉड्यूल पर रूट URLconf को इंगित करना है। django.urls.include mysite/urls.py , django.urls.include लिए एक आयात जोड़ें और urlpatterns सूची में एक सम्मिलित करें include() urlpatterns , ताकि आपके पास:

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

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

include() फ़ंक्शन अन्य URLconfs को संदर्भित करने की अनुमति देता है। जब भी Django के मुकाबलों include() , यह उस बिंदु तक मेल खाने वाले URL के किसी भी हिस्से को काट देता है और शेष स्ट्रिंग को आगे की प्रक्रिया के लिए शामिल URLconf में भेज देता है।

include() करने के पीछे का विचार include() URL को प्लग-एंड-प्ले करना आसान बनाना है। चूंकि चुनाव अपने स्वयं के URLconf ( polls/urls.py ) में होते हैं, इसलिए उन्हें "/ चुनाव /" या "/ fun_polls /" के तहत या "/ सामग्री / चुनाव /", या किसी अन्य पथ रूट के तहत रखा जा सकता है। और ऐप अभी भी काम करेगा।

कब include()

जब आप अन्य URL प्रतिमानों को शामिल करते हैं, तो आपको हमेशा include() उपयोग करना चाहिए। admin.site.urls इसका एकमात्र अपवाद है।

अब आपने URLconf में एक index व्यू को तार-तार कर दिया है। यह सत्यापित करें कि यह काम कर रहा है, निम्नलिखित कमांड चलाएँ:

$ python manage.py runserver
...\> py manage.py runserver

अपने ब्राउज़र में http://localhost:8000/polls/ पर जाएं, और आपको टेक्स्ट " हैलो, वर्ल्ड " देखना चाहिए आप चुनाव सूचकांक में हैं। ”, जिसे आपने index दृश्य में परिभाषित किया है।

पृष्ठ नहीं मिला?

यदि आपको यहां एक त्रुटि पृष्ठ मिलता है, तो जांच लें कि आप http://localhost:8000/polls/ या नहीं http://localhost:8000/

path() फ़ंक्शन को चार तर्क दिए गए हैं, दो आवश्यक: route और view , और दो वैकल्पिक: kwargs , और name । इस बिंदु पर, यह समीक्षा करने के लायक है कि ये तर्क क्या हैं।

path() तर्क: route

route एक स्ट्रिंग है जिसमें एक URL पैटर्न होता है। एक अनुरोध को संसाधित करते समय, Django urlpatterns में पहले पैटर्न पर शुरू होता है और सूची के नीचे दिए गए URL की तुलना करते हुए अनुरोधित URL की तुलना करते हुए सूची में अपना रास्ता बनाता है।

पैटर्न GET और POST पैरामीटर या डोमेन नाम नहीं खोजते हैं। उदाहरण के लिए, https://www.example.com/myapp/ अनुरोध में, URLconf myapp/ लिए दिखेगा। https://www.example.com/myapp/?page=3 अनुरोध में, URLconf भी myapp/ की तलाश करेगा।

path() तर्क: view

जब Django एक मिलान पैटर्न पाता है, तो यह HttpRequest ऑब्जेक्ट के साथ निर्दिष्ट तर्क को पहले तर्क के रूप में कहता है और कीवर्ड तर्कों के रूप में मार्ग से किसी भी "कैप्चर किए गए" मान को। हम इसका उदाहरण एक बिट में देंगे।

path() तर्क: kwargs

लक्ष्य की दृष्टि से शब्दकोष में तर्क-वितर्क वाले तर्क पारित किए जा सकते हैं। हम ट्यूटोरियल में Django की इस सुविधा का उपयोग नहीं करने जा रहे हैं।

path() तर्क: name

अपने URL का नामकरण करने से आप इसे जांगो में कहीं और से खासतौर पर टेम्प्लेट के भीतर से देख सकते हैं। यह शक्तिशाली सुविधा आपको केवल एक फ़ाइल को स्पर्श करते हुए अपनी परियोजना के URL पैटर्न में वैश्विक परिवर्तन करने की अनुमति देती है।

जब आप मूल अनुरोध और प्रतिक्रिया प्रवाह के साथ सहज होते हैं, तो डेटाबेस के साथ काम करना शुरू करने के लिए इस ट्यूटोरियल के भाग 2 को पढ़ें।