Django 2.1 - Django at a glance

एक नज़र में Django




django

एक नज़र में Django

क्योंकि Django एक तेजी से पुस्तक न्यूज़रूम वातावरण में विकसित किया गया था, यह आम वेब-विकास कार्यों को तेज और आसान बनाने के लिए डिज़ाइन किया गया था। यहाँ एक अनौपचारिक अवलोकन है कि कैसे Django के साथ डेटाबेस-संचालित वेब ऐप लिखना है।

इस दस्तावेज़ का लक्ष्य आपको यह समझने के लिए पर्याप्त तकनीकी बारीकियाँ देना है कि Django कैसे काम करता है, लेकिन इसका उद्देश्य एक ट्यूटोरियल या संदर्भ नहीं है - लेकिन हम दोनों मिल गए हैं! जब आप एक परियोजना शुरू करने के लिए तैयार होते हैं, तो आप ट्यूटोरियल के साथ शुरू कर सकते हैं या अधिक विस्तृत प्रलेखन में सही गोता लगा सकते हैं

अपना मॉडल डिज़ाइन करें

यद्यपि आप एक डेटाबेस के बिना Django का उपयोग कर सकते हैं, यह एक ऑब्जेक्ट-रिलेशनल मैपर के साथ आता है जिसमें आप पायथन कोड में अपने डेटाबेस लेआउट का वर्णन करते हैं।

डेटा-मॉडल सिंटैक्स आपके मॉडल का प्रतिनिधित्व करने के कई समृद्ध तरीके प्रदान करता है - अब तक, यह डेटाबेस-स्कीमा समस्याओं के कई वर्षों के समाधान को हल कर रहा है। यहाँ एक त्वरित उदाहरण है:

from django.db import models

class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    def __str__(self):
        return self.full_name

class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

इसे स्थापित करो

इसके बाद, डेटाबेस टेबल को स्वचालित रूप से बनाने के लिए Django कमांड-लाइन उपयोगिता चलाएं:

$ python manage.py migrate
...\> py manage.py migrate

migrate कमांड आपके सभी उपलब्ध मॉडल को देखता है और आपके डेटाबेस में तालिकाओं को बनाता है जो भी पहले से मौजूद नहीं हैं, साथ ही वैकल्पिक रूप से बहुत अमीर स्कीमा नियंत्रण प्रदान करते हैं

मुफ्त एपीआई का आनंद लें

इसके साथ, आपको अपने डेटा तक पहुंचने के लिए एक मुफ़्त और समृद्ध, पायथन एपीआई मिला है। एपीआई मक्खी पर बनाया गया है, कोई आवश्यक कोड पीढ़ी:

# Import the models we created from our "news" app
>>> from news.models import Article, Reporter

# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

# Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Reporter matching query does not exist.

# Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>

# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>

# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>

# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()

# Delete an object with delete().
>>> r.delete()

एक गतिशील व्यवस्थापक इंटरफ़ेस: यह सिर्फ मचान नहीं है - यह पूरा घर है

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

from django.db import models

class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
from django.contrib import admin

from . import models

admin.site.register(models.Article)

यहां दर्शन यह है कि आपकी साइट को एक कर्मचारी, या एक ग्राहक, या शायद सिर्फ आप द्वारा संपादित किया जाता है - और आप केवल सामग्री के प्रबंधन के लिए बैकएंड इंटरफेस बनाने से निपटना नहीं चाहते हैं।

Django ऐप्स बनाने में एक विशिष्ट वर्कफ़्लो मॉडल बनाना और एडमिन साइट्स को तेज़ी से चलाना और चलाना है, इसलिए आपके कर्मचारी (या क्लाइंट) डेटा को आबाद करना शुरू कर सकते हैं। फिर, डेटा को जनता के सामने प्रस्तुत करने का तरीका विकसित करें।

अपने URL डिज़ाइन करें

एक उच्च गुणवत्ता वाले वेब एप्लिकेशन में एक स्वच्छ, सुरुचिपूर्ण URL योजना एक महत्वपूर्ण विवरण है। Django सुंदर URL डिज़ाइन को प्रोत्साहित करता है और URL में कोई भी cruft नहीं डालता है, जैसे .php या .asp

किसी ऐप के लिए URL डिज़ाइन करने के लिए, आप एक Python मॉड्यूल बनाते हैं, जिसे URLconf । आपके ऐप के लिए सामग्री की एक तालिका, इसमें URL पैटर्न और पायथन कॉलबैक फ़ंक्शन के बीच एक सरल मानचित्रण शामिल है। URLconfs पायथन कोड से यूआरएल को डिकूप करने का काम भी करते हैं।

यहां एक URLconf Reporter लिए कैसा दिख सकता है / ऊपर उदाहरण दिया गया है:

from django.urls import path

from . import views

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<int:pk>/', views.article_detail),
]

नक्शे के ऊपर का कोड पायथन कॉलबैक फ़ंक्शंस ("दृश्य") के लिए URL पथों का है। पथ स्ट्रिंग्स URL से "कैप्चर" मानों के लिए पैरामीटर टैग का उपयोग करता है। जब कोई उपयोगकर्ता किसी पृष्ठ का अनुरोध करता है, तो Django प्रत्येक पथ से होकर गुजरता है, और पहले URL पर रुकता है जो अनुरोधित URL से मेल खाता है। (यदि उनमें से कोई भी मेल नहीं खाता है, तो Django एक विशेष-केस 404 दृश्य को कॉल करता है।) यह बहुत तेज़ी से तेज़ है, क्योंकि लोड समय पर पथ को नियमित अभिव्यक्तियों में संकलित किया जाता है।

एक बार URL पैटर्न से मेल खाने के बाद, Django दिए गए दृश्य को कॉल करता है, जो पायथन फ़ंक्शन है। प्रत्येक दृश्य एक अनुरोध ऑब्जेक्ट पास करता है - जिसमें अनुरोध मेटाडेटा होता है - और पैटर्न में कैप्चर किए गए मान।

उदाहरण के लिए, यदि कोई उपयोगकर्ता URL "/ लेख / 2005/05/39323 /" का news.views.article_detail(request, year=2005, month=5, pk=39323) करता है, तो Django फ़ंक्शन news.views.article_detail(request, year=2005, month=5, pk=39323)

अपने विचार लिखिए

प्रत्येक दृश्य दो चीजों में से एक करने के लिए ज़िम्मेदार है: एक HttpResponse ऑब्जेक्ट को अनुरोधित पृष्ठ के लिए सामग्री के साथ Http404 , या Http404 जैसे अपवाद को Http404 । बाकी आप पर निर्भर करता है।

आम तौर पर, एक दृश्य मापदंडों के अनुसार डेटा को पुनर्प्राप्त करता है, एक टेम्पलेट को लोड करता है और पुनः प्राप्त डेटा के साथ टेम्पलेट को प्रदान करता है। ऊपर से year_archive लिए एक उदाहरण देखें:

from django.shortcuts import render

from .models import Article

def year_archive(request, year):
    a_list = Article.objects.filter(pub_date__year=year)
    context = {'year': year, 'article_list': a_list}
    return render(request, 'news/year_archive.html', context)

यह उदाहरण Django के टेम्पलेट सिस्टम का उपयोग करता है , जिसमें कई शक्तिशाली विशेषताएं हैं लेकिन उपयोग करने के लिए गैर-प्रोग्रामर के लिए पर्याप्त सरल रहने का प्रयास करता है।

अपने टेम्प्लेट डिज़ाइन करें

उपरोक्त कोड news/year_archive.html टेम्पलेट लोड करता है।

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

मान लें कि news/year_archive.html टेम्पलेट मिला था। यहाँ है कि क्या लग सकता है:

{% extends "base.html" %}

{% block title %}Articles for {{ year }}{% endblock %}

{% block content %}
<h1>Articles for {{ year }}</h1>

{% for article in article_list %}
    <p>{{ article.headline }}</p>
    <p>By {{ article.reporter.full_name }}</p>
    <p>Published {{ article.pub_date|date:"F j, Y" }}</p>
{% endfor %}
{% endblock %}

चर डबल-घुंघराले ब्रेसिज़ से घिरे हैं। {{ article.headline }} अर्थ है "लेख की शीर्षक विशेषता का मूल्य आउटपुट।" लेकिन डॉट्स केवल विशेषता देखने के लिए उपयोग नहीं किए जाते हैं। वे शब्दकोश-कुंजी लुकअप, इंडेक्स लुकअप और फ़ंक्शन कॉल भी कर सकते हैं।

नोट {{ article.pub_date|date:"F j, Y" }} एक यूनिक्स-शैली "पाइप" ("" "" वर्ण) का उपयोग करता है। इसे टेम्प्लेट फ़िल्टर कहा जाता है, और यह एक चर के मान को फ़िल्टर करने का एक तरीका है। इस स्थिति में, दिनांक फ़िल्टर दिए गए प्रारूप में एक पायथन डेटाइम ऑब्जेक्ट को प्रारूपित करता है (जैसा कि PHP की तिथि फ़ंक्शन में पाया जाता है)।

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

अंत में, Django "टेम्पलेट वंशानुक्रम" की अवधारणा का उपयोग करता है। यही कारण है कि {% extends "base.html" %} करता है। इसका अर्थ है "पहले बेस 'नामक टेम्पलेट को लोड करें, जिसने ब्लॉक का एक गुच्छा परिभाषित किया है, और ब्लॉक को निम्नलिखित ब्लॉकों से भरें।" उस खाके के लिए क्या अनोखा है।

यहां बताया गया है कि स्थिर फ़ाइलों के उपयोग सहित "बेस.html" टेम्प्लेट, कैसा दिख सकता है:

{% load static %}
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <img src="{% static "images/sitelogo.png" %}" alt="Logo">
    {% block content %}{% endblock %}
</body>
</html>

सरलीकृत रूप से, यह साइट के लुक-एंड-फील को परिभाषित करता है (साइट के लोगो के साथ), और भरने के लिए बाल टेम्पलेट्स के लिए "छेद" प्रदान करता है। यह किसी एकल फ़ाइल को बदलने के रूप में एक साइट को नया स्वरूप देता है - आधार टेम्पलेट।

यह आपको बाल टेम्पलेट का पुन: उपयोग करते हुए, विभिन्न आधार टेम्पलेट्स के साथ एक साइट के कई संस्करण बनाने की सुविधा भी देता है। Django के रचनाकारों ने इस तकनीक का उपयोग साइटों के हड़ताली अलग-अलग मोबाइल संस्करणों को बनाने के लिए किया है - बस एक नया आधार टेम्पलेट बनाकर।

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

यह सिर्फ सतह है

यह केवल Django की कार्यक्षमता का एक त्वरित अवलोकन है। कुछ और उपयोगी विशेषताएं:

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

अगले स्पष्ट कदम हैं कि आप Django को डाउनलोड करें , ट्यूटोरियल पढ़ें और समुदाय में शामिल हों। आपकी रुचि के लिए धन्यवाद!