Django 2.1 - Writing views

विचार लिखना




django

विचार लिखना

एक दृश्य फ़ंक्शन, या संक्षिप्त रूप से देखें, केवल एक पायथन फ़ंक्शन है जो वेब अनुरोध लेता है और वेब प्रतिक्रिया देता है। यह प्रतिक्रिया वेब पेज की HTML सामग्री, या पुनर्निर्देशित, या 404 त्रुटि, या XML दस्तावेज़ या एक छवि हो सकती है। । । या कुछ भी, वास्तव में। उस प्रतिक्रिया को वापस करने के लिए जो भी मनमाना तर्क आवश्यक है, उसमें वह दृश्य शामिल है। जब तक यह आपके पाइथन पथ पर है, तब तक यह कोड आपको कहीं भी रह सकता है। कोई अन्य आवश्यकता नहीं है - नहीं "जादू", इसलिए बोलने के लिए। कहीं न कहीं कोड लगाने के लिए, सम्मेलन को अपने प्रोजेक्ट या एप्लिकेशन डायरेक्टरी में रखी गई views.py नामक फाइल में रखना है।

एक साधारण दृश्य

यहां HTML दस्तावेज़ के रूप में वर्तमान तिथि और समय लौटाता है:

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

आइए एक बार में इस कोड एक लाइन के माध्यम से कदम बढ़ाएं:

  • सबसे पहले, हम पायथन की django.http लाइब्रेरी के साथ django.http मॉड्यूल से क्लास HttpResponse आयात करते हैं।
  • इसके बाद, हम एक फ़ंक्शन को परिभाषित करते हैं जिसे current_datetime कहा जाता है। यह देखने का कार्य है। प्रत्येक दृश्य फ़ंक्शन अपने पहले पैरामीटर के रूप में एक HttpRequest ऑब्जेक्ट लेता है, जिसे आमतौर पर request

    ध्यान दें कि दृश्य फ़ंक्शन का नाम मायने नहीं रखता है; यह Django के लिए इसे पहचानने के लिए एक निश्चित तरीके से नाम नहीं है। हम इसे current_datetime यहाँ कह रहे हैं, क्योंकि यह नाम स्पष्ट रूप से इंगित करता है कि यह क्या करता है।

  • दृश्य एक HttpResponse ऑब्जेक्ट देता है जिसमें उत्पन्न प्रतिक्रिया होती है। प्रत्येक दृश्य फ़ंक्शन HttpResponse ऑब्जेक्ट को वापस करने के लिए ज़िम्मेदार है। (अपवाद हैं, लेकिन हम बाद में उन तक पहुँचेंगे।)

Django का समय क्षेत्र

Django में TIME_ZONE सेटिंग शामिल है जो America/Chicago चूक करता है। यह संभवतः वह जगह नहीं है जहाँ आप रहते हैं, इसलिए आप इसे अपनी सेटिंग फ़ाइल में बदलना चाहते हैं।

विचारों के लिए URL का मानचित्रण

इसलिए, पुनर्कथन करने के लिए, यह दृश्य फ़ंक्शन एक HTML पृष्ठ देता है जिसमें वर्तमान दिनांक और समय शामिल होता है। किसी विशेष URL पर यह दृश्य प्रदर्शित करने के लिए, आपको URLconf बनाने की आवश्यकता होगी; निर्देशों के लिए URL डिस्पैचर देखें।

लौटती हुई त्रुटियाँ

Django में HTTP त्रुटि कोड वापस करना आसान है। 200 से अधिक सामान्य HTTP स्थिति कोड (जिसका अर्थ "ठीक है" ) के लिए HttpResponse उपवर्ग हैं। आप request/response प्रलेखन में उपलब्ध उपवर्गों की पूरी सूची पा सकते हैं। एक त्रुटि को इंगित करने के लिए सामान्य HttpResponse बजाय बस उन उपवर्गों में से एक का एक उदाहरण HttpResponse । उदाहरण के लिए:

from django.http import HttpResponse, HttpResponseNotFound

def my_view(request):
    # ...
    if foo:
        return HttpResponseNotFound('<h1>Page not found</h1>')
    else:
        return HttpResponse('<h1>Page was found</h1>')

हर संभव HTTP प्रतिक्रिया कोड के लिए एक विशेष उपवर्ग नहीं है, क्योंकि उनमें से कई उस आम नहीं हैं। हालाँकि, HttpResponse दस्तावेज़ीकरण में प्रलेखित के रूप में, आप अपनी पसंद के किसी भी स्थिति कोड के लिए रिटर्न क्लास बनाने के लिए HttpResponse लिए कंस्ट्रक्टर में HTTP स्थिति कोड भी पास कर सकते हैं। उदाहरण के लिए:

from django.http import HttpResponse

def my_view(request):
    # ...

    # Return a "created" (201) response code.
    return HttpResponse(status=201)

क्योंकि 404 त्रुटियां अब तक की सबसे सामान्य HTTP त्रुटि हैं, इसलिए उन त्रुटियों को संभालने का एक आसान तरीका है।

Http404 अपवाद

class django.http.Http404

जब आप HttpResponseNotFound जैसी कोई त्रुटि लौटाते हैं, तो आप परिणामी त्रुटि पृष्ठ के HTML को परिभाषित करने के लिए जिम्मेदार हैं:

return HttpResponseNotFound('<h1>Page not found</h1>')

सुविधा के लिए, और क्योंकि आपकी साइट पर लगातार 404 त्रुटि पृष्ठ होना एक अच्छा विचार है, Django एक Http404 अपवाद प्रदान करता है। यदि आप किसी दृश्य समारोह में किसी भी बिंदु पर Http404 , तो Django इसे पकड़ लेगा और HTTP त्रुटि कोड 404 के साथ आपके आवेदन के लिए मानक त्रुटि पृष्ठ वापस कर देगा।

उदाहरण का उपयोग:

from django.http import Http404
from django.shortcuts import render
from polls.models import Poll

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404("Poll does not exist")
    return render(request, 'polls/detail.html', {'poll': p})

Django के 404 लौटने पर अनुकूलित HTML दिखाने के लिए, आप 404.html नाम का HTML टेम्पलेट बना सकते हैं और इसे अपने टेम्पलेट ट्री के शीर्ष स्तर पर रख सकते हैं। यह टेम्पलेट तब परोसा जाएगा जब DEBUG को False सेट किया गया हो।

जब DEBUG True , तो आप Http404 को एक संदेश प्रदान कर सकते हैं और यह मानक 404 डीबग टेम्पलेट में दिखाई देगा। डिबगिंग उद्देश्यों के लिए इन संदेशों का उपयोग करें; वे आम तौर पर एक उत्पादन 404 टेम्पलेट में उपयोग के लिए उपयुक्त नहीं हैं।

त्रुटि विचारों को अनुकूलित करना

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

handler404 page_not_found() दृश्य handler404 द्वारा ओवरराइड किया handler404 :

handler404 = 'mysite.views.my_custom_page_not_found_view'

server_error() दृश्य handler500 द्वारा ओवरराइड किया handler500 :

handler500 = 'mysite.views.my_custom_error_view'

handler403 permission_denied() दृश्य handler403 द्वारा ओवरराइड किया handler403 :

handler403 = 'mysite.views.my_custom_permission_denied_view'

bad_request() दृश्य handler400 द्वारा ओवरराइड किया handler400 :

handler400 = 'mysite.views.my_custom_bad_request_view'

यह भी देखें

CSRF त्रुटि दृश्य को ओवरराइड करने के लिए CSRF_FAILURE_VIEW सेटिंग का उपयोग करें।