Django 2.1 - Base views

आधार विचार




django

आधार विचार

निम्नलिखित तीन वर्ग Django के विचारों को बनाने के लिए आवश्यक अधिक कार्यक्षमता प्रदान करते हैं। आप उन्हें माता-पिता के विचारों के रूप में सोच सकते हैं, जिसका उपयोग वे स्वयं कर सकते हैं या उनसे विरासत में प्राप्त कर सकते हैं। वे परियोजनाओं के लिए आवश्यक सभी क्षमताएं प्रदान नहीं कर सकते हैं, इस मामले में मिक्सिंस और जेनेरिक क्लास-आधारित विचार हैं।

Django के कई अंतर्निहित वर्ग-आधारित दृश्य अन्य वर्ग-आधारित विचारों या विभिन्न मिश्रणों से विरासत में मिलते हैं। क्योंकि यह वंशानुक्रम श्रृंखला बहुत महत्वपूर्ण है, पूर्वजों वर्गों को पूर्वजों (एमआरओ) की धारा शीर्षक के तहत प्रलेखित किया जाता है। MRO विधि रिज़ॉल्यूशन ऑर्डर के लिए एक संक्षिप्त नाम है।

View

class django.views.generic.base.View

मास्टर वर्ग-आधारित आधार दृश्य। अन्य सभी वर्ग-आधारित विचार इस आधार वर्ग से प्राप्त होते हैं। यह कड़ाई से एक सामान्य दृश्य नहीं है और इस प्रकार django.views से भी आयात किया जा सकता है।

विधि फ़्लोचार्ट

  1. dispatch()
  2. http_method_not_allowed()
  3. options()

उदाहरण

from django.http import HttpResponse
from django.views import View

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

उदाहरण urls.py :

from django.urls import path

from myapp.views import MyView

urlpatterns = [
    path('mine/', MyView.as_view(), name='my-view'),
]

गुण

http_method_names

HTTP पद्धति के नामों की सूची जिसे यह दृश्य स्वीकार करेगा।

चूक:

['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

तरीके

classmethod as_view(**initkwargs)

एक कॉल करने योग्य दृश्य देता है जो अनुरोध लेता है और प्रतिक्रिया देता है:

response = MyView.as_view()(request)

लौटे दृश्य में view_class और view_initkwargs विशेषताएँ हैं।

जब अनुरोध / प्रतिक्रिया चक्र के दौरान दृश्य को कॉल किया जाता है, तो HttpRequest को दृश्य के request विशेषता को सौंपा जाता है। URL पैटर्न से कैप्चर की गई कोई भी स्थिति और / या कीवर्ड तर्क क्रमशः args और kwargs विशेषताओं को असाइन किए जाते हैं। फिर dispatch() कहा जाता है।

dispatch(request, *args, **kwargs)

view का view भाग - वह विधि जो request तर्क और तर्क स्वीकार करती है, और HTTP प्रतिसाद देती है।

डिफ़ॉल्ट कार्यान्वयन HTTP विधि का निरीक्षण करेगा और HTTP पद्धति से मेल खाने वाली विधि को सौंपने का प्रयास करेगा; एक GET को get() , एक POST को post() करने के लिए post() , और इसी तरह से दिया जाएगा।

डिफ़ॉल्ट रूप से, एक HEAD अनुरोध get() करने के get() प्रत्यायोजित किया जाएगा get() । यदि आपको GET से अलग तरीके से HEAD अनुरोधों को संभालने की आवश्यकता है, तो आप head() विधि को ओवरराइड कर सकते हैं। उदाहरण के लिए अन्य HTTP तरीकों का समर्थन करना देखें।

http_method_not_allowed(request, *args, **kwargs)

यदि दृश्य को HTTP विधि से बुलाया जाता है तो यह समर्थन नहीं करता है, इस विधि को इसके बजाय कहा जाता है।

डिफ़ॉल्ट कार्यान्वयन HttpResponseNotAllowed सादे पाठ में अनुमत विधियों की सूची के साथ है।

options(request, *args, **kwargs)

विकल्प HTTP क्रिया के लिए अनुरोधों का जवाब देता है। Allow शीर्ष लेख के साथ एक प्रतिक्रिया देता है जिसमें दृश्य के अनुमत HTTP विधि नामों की सूची होती है।

TemplateView

class django.views.generic.base.TemplateView

किसी दिए गए टेम्प्लेट को रेंडर करता है, जिसमें URL में कैप्चर किए गए पैरामीटर होते हैं।

पूर्वज (MRO)

यह दृश्य निम्नलिखित विचारों के तरीकों और विशेषताओं को विरासत में देता है:

विधि फ़्लोचार्ट

  1. dispatch()
  2. http_method_not_allowed()
  3. get_context_data()

उदाहरण

from django.views.generic.base import TemplateView

from articles.models import Article

class HomePageView(TemplateView):

    template_name = "home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context

उदाहरण urls.py :

from django.urls import path

from myapp.views import HomePageView

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
]

प्रसंग

  • आबादी वाले ( django.views.generic.base.ContextMixin माध्यम से) URL पैटर्न से कैप्चर किए गए कीवर्ड तर्कों के साथ जिसने दृश्य को दिखाया।
  • आप as_view() लिए as_view() कीवर्ड तर्क का उपयोग करके संदर्भ भी जोड़ सकते हैं।

RedirectView

class django.views.generic.base.RedirectView

किसी दिए गए URL पर रीडायरेक्ट करता है।

दिए गए URL में शब्दकोश-शैली स्ट्रिंग स्वरूपण हो सकता है, जिसे URL में कैप्चर किए गए मापदंडों के विरुद्ध प्रक्षेपित किया जाएगा। क्योंकि कीवर्ड प्रक्षेप हमेशा किया जाता है (भले ही कोई तर्क पारित न हो), URL में किसी भी "%" अक्षर को "%%" रूप में लिखा जाना चाहिए, ताकि पायथन उन्हें आउटपुट पर एकल प्रतिशत संकेत में परिवर्तित कर दे।

यदि दिया गया URL None , तो Django एक HttpResponseGone (410) लौटाएगा।

पूर्वज (MRO)

यह दृश्य निम्नलिखित दृष्टिकोण से विधियों और विशेषताओं को विरासत में देता है:

विधि फ़्लोचार्ट

  1. dispatch()
  2. http_method_not_allowed()
  3. get_redirect_url()

उदाहरण

from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView

from articles.models import Article

class ArticleCounterRedirectView(RedirectView):

    permanent = False
    query_string = True
    pattern_name = 'article-detail'

    def get_redirect_url(self, *args, **kwargs):
        article = get_object_or_404(Article, pk=kwargs['pk'])
        article.update_counter()
        return super().get_redirect_url(*args, **kwargs)

उदाहरण urls.py :

from django.urls import path
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView, ArticleDetail

urlpatterns = [
    path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
    path('details/<int:pk>/', ArticleDetail.as_view(), name='article-detail'),
    path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),
]

गुण

url

URL एक स्ट्रिंग के रूप में पुनर्निर्देशित करता है। या None 410 (Gone) HTTP एरर जुटाने के लिए None

pattern_name

URL पैटर्न का नाम रीडायरेक्ट करने के लिए। इस दृश्य के लिए उत्तीर्ण किए गए समान आर्गनों और कंवरों का उपयोग करके उलटा किया जाएगा।

permanent

क्या रीडायरेक्ट स्थायी होना चाहिए। यहाँ एकमात्र अंतर HTTP स्थिति कोड लौटाया गया है। यदि True , तो रीडायरेक्ट स्थिति कोड 301 का उपयोग करेगा। यदि False , तो रीडायरेक्ट स्थिति कोड 302 का उपयोग करेगा। डिफ़ॉल्ट रूप से, permanent False

query_string

नए स्थान पर GET क्वेरी स्ट्रिंग के साथ पास करना है या नहीं। यदि यह True , तो क्वेरी स्ट्रिंग को URL में जोड़ दिया जाता है। यदि False , तो क्वेरी स्ट्रिंग को छोड़ दिया गया है। डिफ़ॉल्ट रूप से, query_string False

तरीके

get_redirect_url(*args, **kwargs)

पुनर्निर्देशन के लिए लक्ष्य URL का निर्माण करता है।

डिफ़ॉल्ट कार्यान्वयन url को प्रारंभिक स्ट्रिंग के रूप में उपयोग करता है और URL में कैप्चर किए गए नामित समूहों का उपयोग करके उस स्ट्रिंग में % नामांकित मापदंडों का विस्तार करता है।

यदि url सेट नहीं है, तो get_redirect_url() URL में कैप्चर किए गए (नामांकित और अनाम दोनों समूहों का उपयोग किया जाता है) का उपयोग करके get_redirect_url() को उलटने की कोशिश करता है।

यदि query_string द्वारा अनुरोध किया गया है, तो यह क्वेरी स्ट्रिंग को जनरेट किए गए URL पर भी जोड़ देगा। उपवर्ग उन किसी भी व्यवहार को लागू कर सकते हैं जो वे चाहते हैं, जब तक कि विधि एक पुनर्निर्देशित-तैयार URL स्ट्रिंग लौटाती है।