Django 2.1 - Request and response objects

अनुरोध और प्रतिक्रिया वस्तुओं




django

अनुरोध और प्रतिक्रिया वस्तुओं

त्वरित अवलोकन

Django सिस्टम के माध्यम से राज्य को पारित करने के लिए अनुरोध और प्रतिक्रिया वस्तुओं का उपयोग करता है।

जब पृष्ठ का अनुरोध किया जाता है, तो Django एक HttpRequest ऑब्जेक्ट बनाता है जिसमें अनुरोध के बारे में मेटाडेटा होता है। फिर Django उपयुक्त दृश्य को लोड करता है, दृश्य फ़ंक्शन के पहले तर्क के रूप में HttpRequest पास करना। प्रत्येक दृश्य HttpResponse ऑब्जेक्ट को वापस करने के लिए ज़िम्मेदार है।

यह दस्तावेज़ HttpRequest और HttpResponse ऑब्जेक्ट के लिए API की व्याख्या करता है, जो कि django.http मॉड्यूल में परिभाषित किए गए हैं।

HttpRequest ऑब्जेक्ट

class HttpRequest [source]

गुण

सभी विशेषताओं को केवल तभी पढ़ा जाना चाहिए, जब तक कि अन्यथा न कहा जाए।

HttpRequest.scheme

अनुरोध ( http या https आमतौर पर) की योजना का प्रतिनिधित्व करने वाला एक स्ट्रिंग।

HttpRequest.body

कच्चे HTTP एक बाइट स्ट्रिंग के रूप में शरीर का अनुरोध करते हैं। यह पारंपरिक HTML रूपों की तुलना में विभिन्न तरीकों से डेटा को संसाधित करने के लिए उपयोगी है: द्विआधारी छवियां, एक्सएमएल पेलोड आदि। पारंपरिक फॉर्म डेटा को संसाधित करने के लिए, HttpRequest.POST उपयोग करें।

आप फ़ाइल-जैसे इंटरफ़ेस का उपयोग करके HttpRequest से भी पढ़ सकते हैं। HttpRequest.read() देखें।

HttpRequest.path

अनुरोधित पृष्ठ पर पूर्ण पथ का प्रतिनिधित्व करने वाली एक स्ट्रिंग, जिसमें योजना या डोमेन शामिल नहीं है।

उदाहरण: "/music/bands/the_beatles/"

HttpRequest.path_info

कुछ वेब सर्वर कॉन्फ़िगरेशन के तहत, होस्ट नाम के बाद URL का हिस्सा स्क्रिप्ट उपसर्ग भाग और पथ जानकारी भाग में विभाजित होता है। path_info विशेषता में हमेशा पथ का पथ जानकारी भाग होता है, चाहे कोई भी वेब सर्वर का उपयोग किया जा रहा हो। path बजाय इसका उपयोग करने से आपके कोड को परीक्षण और परिनियोजन सर्वर के बीच स्थानांतरित करना आसान हो सकता है।

उदाहरण के लिए, यदि आपके आवेदन के लिए WSGIScriptAlias "/minfo" सेट है, तो path "/minfo/music/bands/the_beatles/" हो सकता है और path_info "/music/bands/the_beatles/"

HttpRequest.method

अनुरोध में प्रयुक्त HTTP विधि का प्रतिनिधित्व करने वाला एक स्ट्रिंग। यह अपरकेस होने की गारंटी है। उदाहरण के लिए:

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
HttpRequest.encoding

फ़ॉर्म एन्कोडिंग डेटा (या None , जिसका अर्थ है DEFAULT_CHARSET सेटिंग का उपयोग किया जाता है) को डिकोड करने के लिए उपयोग की जाने वाली वर्तमान एन्कोडिंग का प्रतिनिधित्व करने वाला एक स्ट्रिंग है)। प्रपत्र डेटा एक्सेस करते समय उपयोग किए गए एन्कोडिंग को बदलने के लिए आप इस विशेषता को लिख सकते हैं। बाद की कोई भी विशेषता एक्सेस (जैसे GET या HttpRequest.POST से पढ़ना) नए encoding मान का उपयोग करेगी। उपयोगी यदि आप जानते हैं कि प्रपत्र डेटा DEFAULT_CHARSET एन्कोडिंग में नहीं है।

HttpRequest.content_type

अनुरोध के MIME प्रकार का प्रतिनिधित्व करने वाली एक स्ट्रिंग, जो CONTENT_TYPE हेडर से पार्स की गई है।

HttpRequest.content_params

CONTENT_TYPE हेडर में शामिल कुंजी / मान मापदंडों का एक शब्दकोश।

HttpRequest.GET

एक डिक्शनरी जैसी वस्तु जिसमें सभी दिए गए HTTP GET पैरामीटर हैं। नीचे QueryDict प्रलेखन देखें।

HttpRequest.POST

एक डिक्शनरी जैसी वस्तु जिसमें सभी दिए गए HTTP POST पैरामीटर हैं, बशर्ते कि अनुरोध में प्रपत्र डेटा हो। नीचे QueryDict प्रलेखन देखें। यदि आपको अनुरोध में पोस्ट किए गए कच्चे या गैर-प्रपत्र डेटा तक पहुंचने की आवश्यकता है, तो इसके बजाय HttpRequest.body विशेषता के माध्यम से एक्सेस करें।

यह संभव है कि POST के माध्यम से एक खाली POST शब्दकोश के साथ एक अनुरोध आ सकता है - अगर, कहते हैं, POST HTTP विधि के माध्यम से एक फॉर्म का अनुरोध किया गया है, लेकिन प्रपत्र डेटा शामिल नहीं है। इसलिए, if request.POST आप POST विधि के उपयोग के लिए if request.POST करने के लिए if request.POST का उपयोग नहीं करते हैं; इसके बजाय, if request.method == "POST" ( HttpRequest.method देखें)।

POST में फ़ाइल-अपलोड जानकारी शामिल नहीं है FILES देखें।

HttpRequest.COOKIES

सभी कुकीज़ वाला शब्दकोश। कुंजी और मान तार हैं।

HttpRequest.FILES

सभी अपलोड की गई फ़ाइलों वाली एक शब्दकोश जैसी वस्तु। FILES प्रत्येक कुंजी <input type="file" name="">FILES में प्रत्येक मान एक UploadedFile

अधिक जानकारी के लिए फ़ाइलें प्रबंधित करना देखें।

FILES में केवल तभी डेटा होगा जब अनुरोध विधि POST थी और <form> जिसने अनुरोध पर पोस्ट किया था, उसमें enctype="multipart/form-data" । अन्यथा, FILES एक रिक्त शब्दकोश जैसी वस्तु होगी।

HttpRequest.META

एक शब्दकोश जिसमें सभी उपलब्ध HTTP हेडर हैं। उपलब्ध हेडर क्लाइंट और सर्वर पर निर्भर करते हैं, लेकिन यहां कुछ उदाहरण दिए गए हैं:

  • CONTENT_LENGTH - अनुरोध निकाय की लंबाई (एक स्ट्रिंग के रूप में)।
  • CONTENT_TYPE - अनुरोध निकाय का MIME प्रकार।
  • HTTP_ACCEPT - प्रतिक्रिया के लिए स्वीकार्य सामग्री प्रकार।
  • HTTP_ACCEPT_ENCODING - प्रतिक्रिया के लिए स्वीकार्य एन्कोडिंग।
  • HTTP_ACCEPT_LANGUAGE - प्रतिक्रिया के लिए स्वीकार्य भाषाएं।
  • HTTP_HOST - क्लाइंट द्वारा भेजा गया HTTP होस्ट हेडर।
  • HTTP_REFERER - संदर्भ पृष्ठ, यदि कोई हो।
  • HTTP_USER_AGENT - क्लाइंट का उपयोगकर्ता-एजेंट स्ट्रिंग।
  • QUERY_STRING - क्वेरी स्ट्रिंग, एक सिंगल (अनस्पार्स्ड) स्ट्रिंग के रूप में।
  • REMOTE_ADDR - क्लाइंट का IP पता।
  • REMOTE_HOST - क्लाइंट का होस्टनाम।
  • REMOTE_USER - वेब सर्वर द्वारा प्रमाणित उपयोगकर्ता, यदि कोई हो।
  • REQUEST_METHOD - "GET" या "POST" जैसे एक स्ट्रिंग।
  • SERVER_NAME - सर्वर का होस्टनाम।
  • SERVER_PORT - सर्वर का पोर्ट (एक स्ट्रिंग के रूप में)।

CONTENT_LENGTH और CONTENT_TYPE के अपवाद के साथ, जैसा कि ऊपर दिया गया है, अनुरोध में कोई भी HTTP शीर्षलेख सभी वर्णों को अपरकेस में कनवर्ट करके, किसी भी हाइफ़न को अंडरस्कोर के साथ बदलकर और HTTP_ उपसर्ग जोड़कर नाम में बदल दिया जाता है। इसलिए, उदाहरण के लिए, X-Bender नामक हेडर को META कुंजी HTTP_X_BENDER मैप किया जाएगा।

ध्यान दें कि runserver नाम में सभी हेडर को अंडरस्कोर runserver , इसलिए आप उन्हें META में नहीं देखेंगे। यह हेडर-स्पूफिंग को अंडरस्कोर के बीच अस्पष्टता से बचाता है और डब्लूएसजीआई पर्यावरण चर में अंडरस्कोर को सामान्य करने के लिए दोनों बनाता है। यह निगंक्स और अपाचे 2.4+ जैसे वेब सर्वर के व्यवहार से मेल खाता है।

HttpRequest.resolver_match

ResolverMatch का एक उदाहरण हल किए गए URL का प्रतिनिधित्व करता है। यह विशेषता केवल URL को हल करने के बाद सेट की गई है, जिसका अर्थ है कि यह सभी दृश्यों में उपलब्ध है, लेकिन बीच में नहीं जो URL के हल होने से पहले निष्पादित हो जाते हैं (आप इसे process_view() में उपयोग कर सकते हैं)।

अनुप्रयोग कोड द्वारा निर्धारित विशेषताएँ

Django इन विशेषताओं को स्वयं सेट नहीं करता है, लेकिन यदि आपके एप्लिकेशन द्वारा सेट किया गया है, तो उनका उपयोग करता है।

HttpRequest.current_app

url टेम्प्लेट टैग अपने मूल्य को current_app तर्क reverse() रूप में उपयोग करेगा।

HttpRequest.urlconf

यह ROOT_URLCONF सेटिंग को ओवरराइड करते हुए वर्तमान अनुरोध के लिए रूट URLconf के रूप में उपयोग किया जाएगा। देखें कि कैसे Django विवरण के लिए अनुरोध संसाधित करता है

urlconf को पिछले मिडलवेयर द्वारा किए गए किसी भी परिवर्तन को वापस करने और ROOT_URLCONF का उपयोग करने के लिए वापस करने के लिए किसी को None सेट None किया जा सकता है।

मिडलवेयर द्वारा निर्धारित विशेषताएँ

Django के कंट्रीब ऐप में शामिल कुछ मिडलवेयर अनुरोध पर विशेषताएँ सेट करते हैं। यदि आपको किसी अनुरोध पर विशेषता दिखाई नहीं देती है, तो सुनिश्चित करें कि MIDDLEWARE में उपयुक्त मिडलवेयर वर्ग सूचीबद्ध है।

HttpRequest.session

SessionMiddleware : एक पठनीय और लिखने योग्य, शब्दकोश जैसी वस्तु जो वर्तमान सत्र का प्रतिनिधित्व करती है।

HttpRequest.site

CurrentSiteMiddleware : Site या RequestSite का एक उदाहरण RequestSite कि RequestSite get_current_site() वर्तमान साइट का प्रतिनिधित्व करता है।

HttpRequest.user

AuthenticationMiddleware : AUTH_USER_MODEL का एक उदाहरण वर्तमान में लॉग-इन उपयोगकर्ता का प्रतिनिधित्व करता है। यदि उपयोगकर्ता वर्तमान में लॉग इन नहीं है, तो user AnonymousUser user लिए सेट हो जाएगा। आप उन्हें is_authenticated साथ अलग बता सकते हैं, जैसे:

if request.user.is_authenticated:
    ... # Do something for logged-in users.
else:
    ... # Do something for anonymous users.

तरीके

HttpRequest.get_host() [source]

उस क्रम में HTTP_X_FORWARDED_HOST (यदि USE_X_FORWARDED_HOST सक्षम है) और HTTP_HOST शीर्ष HTTP_X_FORWARDED_HOST से जानकारी का उपयोग करके अनुरोध के मूल होस्ट को USE_X_FORWARDED_HOST है। यदि वे एक मूल्य प्रदान नहीं करते हैं, तो विधि PEP 3333 में विस्तृत रूप से SERVER_NAME और SERVER_PORT संयोजन का उपयोग करती है।

उदाहरण: "127.0.0.1:8000"

ध्यान दें

get_host() विधि विफल हो जाती है जब मेजबान कई परदे के पीछे होता है। निम्न उदाहरण में, प्रॉक्सी हेडर को फिर से लिखने के लिए मिडलवेयर का उपयोग एक समाधान है:

from django.utils.deprecation import MiddlewareMixin

class MultipleProxyMiddleware(MiddlewareMixin):
    FORWARDED_FOR_FIELDS = [
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED_HOST',
        'HTTP_X_FORWARDED_SERVER',
    ]

    def process_request(self, request):
        """
        Rewrites the proxy headers so that only the most
        recent proxy is used.
        """
        for field in self.FORWARDED_FOR_FIELDS:
            if field in request.META:
                if ',' in request.META[field]:
                    parts = request.META[field].split(',')
                    request.META[field] = parts[-1].strip()

इस मिडलवेयर को किसी अन्य मिडलवेयर से पहले पोस्ट किया जाना चाहिए जो get_host() के मूल्य पर निर्भर करता है - उदाहरण के लिए, CommonMiddleware या CsrfViewMiddleware

HttpRequest.get_port() [source]

HTTP_X_FORWARDED_PORT (यदि USE_X_FORWARDED_PORT सक्षम है) और SERVER_PORT META चर से जानकारी का उपयोग करते हुए अनुरोध का मूल पोर्ट लौटाता है।

HttpRequest.get_full_path() [source]

यदि लागू हो, तो path , और एक जोड़ा क्वेरी स्ट्रिंग लौटाता है।

उदाहरण: "/music/bands/the_beatles/?print=true"

HttpRequest.get_full_path_info() [source]
Django 2.1 में नया:

जैसे get_full_path() , लेकिन path बजाय path_info का उपयोग करता path

उदाहरण: "/minfo/music/bands/the_beatles/?print=true"

HttpRequest.build_absolute_uri(location) [source]

location का पूर्ण URI रूप लौटाता है। यदि कोई स्थान प्रदान नहीं किया गया है, तो स्थान request.get_full_path() सेट किया जाएगा।

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

उदाहरण: "https://example.com/music/bands/the_beatles/?print=true"

ध्यान दें

HTTP और HTTPS को एक ही साइट पर build_absolute_uri() से हतोत्साहित किया जाता है, इसलिए build_absolute_uri() हमेशा उसी योजना के साथ एक पूर्ण URI उत्पन्न करेगा जिसका वर्तमान अनुरोध है। यदि आपको उपयोगकर्ताओं को HTTPS पर पुनर्निर्देशित करने की आवश्यकता है, तो अपने वेब सर्वर को HTTPS में सभी HTTP ट्रैफ़िक को पुनर्निर्देशित करने देना सबसे अच्छा है।

हस्ताक्षरित कुकी के लिए कुकी मान लौटाता है, या django.core.signing.BadSignature अपवाद उठाता है यदि हस्ताक्षर अब मान्य नहीं है। यदि आप default तर्क प्रदान करते हैं तो अपवाद को दबा दिया जाएगा और उस डिफ़ॉल्ट मान को इसके बजाय वापस कर दिया जाएगा।

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

उदाहरण के लिए:

>>> request.get_signed_cookie('name')
'Tony'
>>> request.get_signed_cookie('name', salt='name-salt')
'Tony' # assuming cookie was set using the same salt
>>> request.get_signed_cookie('nonexistent-cookie')
...
KeyError: 'nonexistent-cookie'
>>> request.get_signed_cookie('nonexistent-cookie', False)
False
>>> request.get_signed_cookie('cookie-that-was-tampered-with')
...
BadSignature: ...
>>> request.get_signed_cookie('name', max_age=60)
...
SignatureExpired: Signature age 1677.3839159 > 60 seconds
>>> request.get_signed_cookie('name', False, max_age=60)
False

अधिक जानकारी के लिए क्रिप्टोग्राफ़िक हस्ताक्षर देखें।

HttpRequest.is_secure() [source]

यदि अनुरोध सुरक्षित है तो True लौटाता है; यह है, अगर यह HTTPS के साथ बनाया गया था।

HttpRequest.is_ajax() [source]

यह True अगर अनुरोध XMLHttpRequest माध्यम से किया गया है, तो स्ट्रिंग 'XMLHttpRequest' लिए HTTP_X_REQUESTED_WITH शीर्षक की जाँच करके। अधिकांश आधुनिक जावास्क्रिप्ट लाइब्रेरी इस हेडर को भेजते हैं। यदि आप अपना खुद का XMLHttpRequest कॉल (ब्राउज़र की तरफ) लिखते हैं, तो आपको इस हेडर को मैन्युअल रूप से सेट करना होगा यदि आप काम करने के लिए is_ajax() चाहते हैं।

यदि कोई प्रतिक्रिया AJAX के माध्यम से अनुरोध की गई है या नहीं, तो आप Django के cache middleware जैसे कैशिंग के किसी रूप का उपयोग कर रहे हैं या नहीं, तो आपको vary_on_headers('X-Requested-With') साथ दृश्य को सजाना चाहिए ताकि प्रतिक्रियाएँ ठीक से कैश हो जाएं।

HttpRequest.read(size=None) [source]
HttpRequest.readline() [source]
HttpRequest.readlines() [source]
HttpRequest.__iter__() [source]

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

इस मानक इंटरफ़ेस को देखते हुए, एक HttpRequest उदाहरण सीधे XML पार्सर जैसे कि ElementTree को दिया जा सकता है:

import xml.etree.ElementTree as ET
for element in ET.iterparse(request):
    process(element)

QueryDict ऑब्जेक्ट्स

class QueryDict [source]

एक HttpRequest ऑब्जेक्ट में, GET और HttpRequest.POST विशेषताएँ django.http.QueryDict उदाहरण हैं, एक शब्दकोश जैसी श्रेणी जो एक ही कुंजी के लिए कई मानों से निपटने के लिए अनुकूलित है। यह आवश्यक है क्योंकि कुछ HTML फार्म तत्व, विशेष रूप से <select multiple> एक ही कुंजी के लिए कई मान पास करते हैं।

QueryDict s request.POST और request.GET पर एक सामान्य अनुरोध / प्रतिक्रिया चक्र में पहुंचने पर अपरिवर्तनीय होगा। एक परिवर्तनशील संस्करण प्राप्त करने के लिए आपको QueryDict.copy() का उपयोग करने की आवश्यकता है।

तरीके

QueryDict सभी मानक शब्दकोश विधियों को लागू करता है क्योंकि यह शब्दकोश का एक उपवर्ग है। अपवाद यहां उल्लिखित हैं:

QueryDict.__init__(query_string=None, mutable=False, encoding=None) [source]

QueryDict आधार पर एक QueryDict ऑब्जेक्ट को query_string

>>> QueryDict('a=1&a=2&c=3')
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

यदि query_string इसमें पास नहीं हुई है, तो परिणामी QueryDict खाली हो जाएगा (इसमें कोई कुंजी या मान नहीं होगा)।

अधिकांश QueryDict आपका सामना करते हैं, और विशेष रूप से request.POST और request.GET , अपरिवर्तनीय होंगे। यदि आप एक को खुद को __init__() कर रहे हैं, तो आप इसे __init__() कर सकते हैं।

कुंजी और मान दोनों को सेट करने के लिए स्ट्रिंग्स को encoding से str परिवर्तित किया जाएगा। यदि encoding सेट नहीं है, तो यह DEFAULT_CHARSET को डिफॉल्ट करता है।

classmethod QueryDict.fromkeys(iterable, value='', mutable=False, encoding=None) [source]

QueryDict के लिए कुंजियों के साथ एक नया QueryDict बनाता है और मूल्य के बराबर प्रत्येक value । उदाहरण के लिए:

>>> QueryDict.fromkeys(['a', 'a', 'b'], value='val')
<QueryDict: {'a': ['val', 'val'], 'b': ['val']}>
QueryDict.__getitem__(key)

दिए गए कुंजी के लिए मान लौटाता है। यदि कुंजी का एक से अधिक मान है, तो वह अंतिम मान लौटाता है। यदि django.utils.datastructures.MultiValueDictKeyError उठाता है, तो कुंजी मौजूद नहीं है। (यह पायथन के मानक KeyError का उपवर्ग है, इसलिए आप KeyError को पकड़ने के लिए चिपक सकते हैं।)

QueryDict.__setitem__(key, value) [source]

दिए गए कुंजी को [value] सेट करता है (एक सूची जिसका एकल तत्व value )। ध्यान दें कि यह, अन्य शब्दकोश फ़ंक्शंस के साइड इफेक्ट्स हैं, जिन्हें केवल एक परिवर्तनशील QueryDict (जैसे कि एक जिसे QueryDict.copy() ) के माध्यम से बनाया गया था, पर बुलाया जा सकता है।

QueryDict.__contains__(key)

यदि दिया गया कुंजी सेट है तो True है। if "foo" in request.GET , उदाहरण के लिए, यह करते हैं।

QueryDict.get(key, default=None)

कुंजी के मौजूद न होने पर डिफ़ॉल्ट मान वापस करने के लिए हुक के साथ __getitem__() के समान तर्क का उपयोग करता है।

QueryDict.setdefault(key, default=None) [source]

dict.setdefault() तरह। dict.setdefault() , सिवाय इसके कि __setitem__() आंतरिक रूप से उपयोग किया __setitem__()

QueryDict.update(other_dict)

या तो एक QueryDict या एक शब्दकोश लेता है। dict.update() तरह dict.update() , इसके अलावा यह वर्तमान शब्दकोश आइटम को बदलने के बजाय उन्हें जोड़ता है। उदाहरण के लिए:

>>> q = QueryDict('a=1', mutable=True)
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
'2'
QueryDict.items()

dict.items() तरह dict.items() , इसके अलावा __getitem__() रूप में एक ही अंतिम मान तर्क का उपयोग करता है और एक दृश्य वस्तु के बजाय एक __getitem__() वस्तु देता है। उदाहरण के लिए:

>>> q = QueryDict('a=1&a=2&a=3')
>>> list(q.items())
[('a', '3')]
QueryDict.values()

dict.values() तरह dict.values() , इसके अलावा __getitem__() रूप में एक ही अंतिम-मूल्य तर्क का उपयोग करता है और एक दृश्य वस्तु के बजाय एक __getitem__() देता है। उदाहरण के लिए:

>>> q = QueryDict('a=1&a=2&a=3')
>>> list(q.values())
['3']

इसके अलावा, QueryDict में निम्नलिखित विधियाँ हैं:

QueryDict.copy() [source]

copy.deepcopy() का उपयोग करके ऑब्जेक्ट की एक प्रति लौटाता है। यदि मूल नहीं था, तो भी यह प्रतिलिपि परस्पर योग्य होगी।

QueryDict.getlist(key, default=None)

अनुरोधित कुंजी के साथ डेटा की सूची लौटाता है। यदि कोई कुंजी मौजूद नहीं है और एक डिफ़ॉल्ट मान प्रदान नहीं किया गया था तो एक खाली सूची देता है। यह एक सूची वापस करने की गारंटी है जब तक कि डिफ़ॉल्ट मूल्य प्रदान की गई सूची नहीं है।

QueryDict.setlist(key, list_) [source]

दिए गए कुंजी को list_ सेट करता है ( __setitem__() विपरीत)।

QueryDict.appendlist(key, item) [source]

एक आइटम को कुंजी से जुड़ी आंतरिक सूची में जोड़ता है।

QueryDict.setlistdefault(key, default_list=None) [source]

setdefault() , सिवाय इसके कि यह एक मान के बजाय मूल्यों की एक सूची लेता है।

QueryDict.lists()

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

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
QueryDict.pop(key) [source]

दिए गए कुंजी के लिए मूल्यों की एक सूची देता है और उन्हें शब्दकोश से हटा देता है। यदि कुंजी मौजूद नहीं है, तो KeyError उठाता है। उदाहरण के लिए:

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.pop('a')
['1', '2', '3']
QueryDict.popitem() [source]

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

>>> q = QueryDict('a=1&a=2&a=3', mutable=True)
>>> q.popitem()
('a', ['1', '2', '3'])
QueryDict.dict()

QueryDict का एक QueryDict प्रतिनिधित्व QueryDictQueryDict में हर (कुंजी, सूची) जोड़ी के लिए, QueryDict पास (कुंजी, आइटम) होगा, जहां आइटम सूची का एक तत्व है, __getitem__() के समान तर्क का उपयोग करते हुए।

>>> q = QueryDict('a=1&a=3&a=5')
>>> q.dict()
{'a': '5'}
QueryDict.urlencode(safe=None) [source]

क्वेरी स्ट्रिंग प्रारूप में डेटा की एक स्ट्रिंग लौटाता है। उदाहरण के लिए:

>>> q = QueryDict('a=2&b=3&b=5')
>>> q.urlencode()
'a=2&b=3&b=5'

उन वर्णों को पारित करने के लिए safe पैरामीटर का उपयोग करें जिन्हें एन्कोडिंग की आवश्यकता नहीं है। उदाहरण के लिए:

>>> q = QueryDict(mutable=True)
>>> q['next'] = '/a&b/'
>>> q.urlencode(safe='/')
'next=/a%26b/'

HttpResponse ऑब्जेक्ट्स

class HttpResponse [source]

HttpRequest ऑब्जेक्ट्स के विपरीत, जो कि Django द्वारा स्वचालित रूप से बनाई गई हैं, HttpResponse ऑब्जेक्ट्स आपकी जिम्मेदारी हैं। प्रत्येक दृश्य जो आप लिखते हैं, एक HttpResponse , आबादी और HttpResponse वापस करने के लिए जिम्मेदार है।

HttpResponse वर्ग django.http मॉड्यूल में रहता है।

प्रयोग

पासिंग स्ट्रिंग्स

विशिष्ट उपयोग पृष्ठ की सामग्री को स्ट्रिंग के रूप में, HttpResponse निर्माता को पास करना है:

>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", content_type="text/plain")

लेकिन अगर आप सामग्री को वृद्धिशील रूप से जोड़ना चाहते हैं, तो आप response उपयोग फ़ाइल की तरह ऑब्जेक्ट के रूप में कर सकते हैं:

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")

पास करने वाले

अंत में, आप स्ट्रिंग्स के बजाय HttpResponse पास कर सकते हैं। HttpResponse का तुरंत उपभोग करेगा, इसकी सामग्री को एक स्ट्रिंग के रूप में संग्रहीत करेगा, और इसे त्याग देगा। एक close() विधि जैसे कि फ़ाइलें और जनरेटर के साथ ऑब्जेक्ट तुरंत बंद हो जाते हैं।

यदि आपको इट्रेटर से क्लाइंट तक स्ट्रीम की जाने वाली प्रतिक्रिया की आवश्यकता है, तो आपको इसके बजाय StreamingHttpResponse वर्ग का उपयोग करना होगा।

हेडर फ़ील्ड सेट करना

अपनी प्रतिक्रिया में हेडर फ़ील्ड सेट या निकालने के लिए, इसे एक शब्दकोश की तरह व्यवहार करें:

>>> response = HttpResponse()
>>> response['Age'] = 120
>>> del response['Age']

ध्यान दें कि एक शब्दकोश के विपरीत, यदि कोई हेडर फ़ील्ड मौजूद नहीं है, तो del KeyError नहीं बढ़ाता है।

Cache-Control और Vary हैडर फ़ील्ड सेट करने के लिए, patch_cache_control() से patch_cache_control() और patch_vary_headers() विधियों का उपयोग करने की सिफारिश की जाती है, क्योंकि इन फ़ील्डों में एकाधिक, अल्पविराम से अलग मान हो सकते हैं। "पैच" विधियाँ यह सुनिश्चित करती हैं कि अन्य मान, जैसे किसी मिडलवेयर द्वारा जोड़े गए, हटाए नहीं गए हैं।

HTTP हेडर फ़ील्ड में नई लिंक नहीं हो सकती हैं। BadHeaderError फ़ील्ड को एक नई BadHeaderError वर्ण (CR या LF) से सेट करने का प्रयास BadHeaderError

फ़ाइल अनुलग्नक के रूप में प्रतिक्रिया का इलाज करने के लिए ब्राउज़र को बताना

फ़ाइल अनुलग्नक के रूप में प्रतिक्रिया का इलाज करने के लिए ब्राउज़र को बताने के लिए, content_type तर्क का उपयोग करें और Content-Disposition विवाद शीर्षक सेट करें। उदाहरण के लिए, यह है कि आप Microsoft Excel स्प्रेडशीट कैसे लौटा सकते हैं:

>>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
>>> response['Content-Disposition'] = 'attachment; filename="foo.xls"'

Content-Disposition शीर्षक के बारे में Content-Disposition विशिष्ट कुछ भी नहीं है, लेकिन सिंटैक्स को भूलना आसान है, इसलिए हमने इसे यहां शामिल किया है।

गुण

HttpResponse.content

यदि आवश्यक हो तो एक स्ट्रिंग सामग्री से एन्कोडेड एक बाइटस्ट्रिंग।

HttpResponse.charset

एक स्ट्रिंग जो चारसेट को दर्शाती है जिसमें प्रतिक्रिया को एन्कोड किया जाएगा। यदि HttpResponse तात्कालिकता समय पर नहीं दिया गया है, तो इसे content_type से निकाला जाएगा और यदि वह असफल है, तो DEFAULT_CHARSET सेटिंग का उपयोग किया जाएगा।

HttpResponse.status_code

प्रतिक्रिया के लिए HTTP स्थिति कोड

जब तक reason_phrase को स्पष्ट रूप से सेट नहीं किया जाता है, status_code बाहर status_code के मूल्य को संशोधित करने से भी reason_phrase के मान को संशोधित किया जाएगा।

HttpResponse.reason_phrase

प्रतिक्रिया के लिए HTTP कारण वाक्यांश। यह HTTP मानक के डिफ़ॉल्ट कारण वाक्यांशों का उपयोग करता है।

जब तक स्पष्ट रूप से सेट नहीं किया जाता है, reason_phrase , reason_phrase के मूल्य से निर्धारित होता है।

HttpResponse.streaming

यह हमेशा False

यह विशेषता मौजूद है इसलिए मिडलवेयर नियमित प्रतिक्रियाओं से स्ट्रीमिंग प्रतिक्रियाओं को अलग तरह से व्यवहार कर सकता है।

HttpResponse.closed

True अगर प्रतिक्रिया बंद कर दी गई है।

तरीके

HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None) [source]

दिए गए पृष्ठ की सामग्री और सामग्री प्रकार के साथ एक HttpResponse ऑब्जेक्ट को इंस्टैंट करता है।

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

content_type MIME प्रकार वैकल्पिक रूप से एक वर्ण सेट एन्कोडिंग द्वारा पूरा किया गया है और इसका उपयोग HTTP Content-Type हेडर को भरने के लिए किया जाता है। यदि निर्दिष्ट नहीं किया गया है, तो यह डिफ़ॉल्ट रूप से DEFAULT_CONTENT_TYPE और DEFAULT_CHARSET सेटिंग्स द्वारा बनता है: " text/html; charset=utf-8 text/html; charset=utf-8 ”।

status प्रतिक्रिया के लिए HTTP स्थिति कोड है

reason HTTP प्रतिक्रिया वाक्यांश है। यदि प्रदान नहीं किया गया है, तो एक डिफ़ॉल्ट वाक्यांश का उपयोग किया जाएगा।

charset वह चारसेट है जिसमें प्रतिक्रिया को एन्कोड किया जाएगा। यदि नहीं दिया गया है तो उसे content_type से निकाला जाएगा, और यदि वह असफल है, तो DEFAULT_CHARSET सेटिंग का उपयोग किया जाएगा।

HttpResponse.__setitem__(header, value)

दिए गए हेडर का नाम दिए गए मान पर सेट करता है। header और value दोनों तार होने चाहिए।

HttpResponse.__delitem__(header)

हेडर को दिए गए नाम से हटाता है। हेडर मौजूद नहीं है, तो चुपचाप विफल रहता है। असंवेदनशील मामला।

HttpResponse.__getitem__(header)

दिए गए हेडर नाम के लिए मान लौटाता है। असंवेदनशील मामला।

HttpResponse.has_header(header)

दिए गए नाम के साथ शीर्ष लेख के लिए केस-असंवेदनशील जांच के आधार पर True या False लौटाता है।

HttpResponse.setdefault(header, value)

एक हेडर तब तक सेट करता है जब तक कि वह पहले से सेट न हो।

कुकी सेट करता है। पैरामीटर पायथन मानक पुस्तकालय में Morsel कुकी ऑब्जेक्ट के समान हैं।

  • max_age कई सेकंड या None (डिफ़ॉल्ट) होना चाहिए, यदि कुकी क्लाइंट के ब्राउज़र सत्र के रूप में लंबे समय तक चलना चाहिए। यदि expires निर्दिष्ट नहीं है, तो इसकी गणना की जाएगी।
  • expires या तो "Wdy, DD-Mon-YY HH:MM:SS GMT" या UTC में एक datetime.datetime ऑब्जेक्ट प्रारूप में एक स्ट्रिंग होना चाहिए। यदि expires है, तो एक max_age ऑब्जेक्ट है, max_age गणना की जाएगी।
  • यदि आप क्रॉस-डोमेन कुकी सेट करना चाहते हैं तो domain उपयोग करें। उदाहरण के लिए, domain="example.com" एक कुकी सेट करेगा जो कि डोमेन www.example.com, blog.example.com, आदि द्वारा पठनीय है, अन्यथा, एक कुकी केवल उसी डोमेन द्वारा पठनीय होगी जो इसे सेट करता है।
  • अगर आप क्लाइंट-साइड जावास्क्रिप्ट को कुकी तक पहुंचने से रोकना चाहते हैं, तो httponly=True उपयोग करें।

    HTTPOnly एक ध्वज है जो सेट-कुकी HTTP प्रतिक्रिया शीर्षलेख में शामिल है। यह कुकीज़ के लिए RFC 2109 मानक का हिस्सा नहीं है, और यह सभी ब्राउज़रों द्वारा लगातार सम्मानित नहीं किया जाता है। हालाँकि, जब इसे सम्मानित किया जाता है, तो यह सुरक्षित कुकी डेटा तक पहुँचने से क्लाइंट-साइड स्क्रिप्ट के जोखिम को कम करने का एक उपयोगी तरीका हो सकता है।

  • क्रॉस- samesite='Lax' करने पर ब्राउजर को यह न भेजने के लिए बताने के लिए samesite='Strict' या samesite='Lax' का प्रयोग करें। SameSite सभी ब्राउज़रों द्वारा समर्थित नहीं है, इसलिए यह Django के CSRF सुरक्षा के लिए प्रतिस्थापन नहीं है, बल्कि गहराई माप में एक रक्षा है।
Django 2.1 में परिवर्तित:

samesite तर्क जोड़ा गया था।

चेतावनी

RFC 2109 और RFC 6265 दोनों कहते हैं कि उपयोगकर्ता एजेंटों को कम से कम 4096 बाइट्स की कुकीज़ का समर्थन करना चाहिए। कई ब्राउज़रों के लिए यह अधिकतम आकार भी है। अगर 4096 से अधिक बाइट्स की कुकी को स्टोर करने का प्रयास है, तो Django अपवाद नहीं बढ़ाएगा, लेकिन कई ब्राउज़र कुकी को सही ढंग से सेट नहीं करेंगे।

जैसे set_cookie() , लेकिन इसे स्थापित करने से पहले कुकी पर क्रिप्टोग्राफ़िक हस्ताक्षर करना। HttpRequest.get_signed_cookie() के साथ संयोजन में उपयोग करें। आप अतिरिक्त कुंजी के लिए वैकल्पिक salt तर्क का उपयोग कर सकते हैं, लेकिन आपको इसे संबंधित HttpRequest.get_signed_cookie() कॉल पर पास करना याद रखना होगा।

दी गई कुंजी के साथ कुकी को हटाता है। यदि कुंजी मौजूद नहीं है तो चुपचाप विफल रहता है।

कुकीज़ के काम करने के तरीके के कारण, path और domain समान मूल्य होने चाहिए जो आपने set_cookie() में उपयोग किए हैं - अन्यथा कुकी को हटाया नहीं जा सकता है।

HttpResponse.write(content) [source]

यह विधि एक HttpResponse उदाहरण फ़ाइल जैसी ऑब्जेक्ट बनाता है।

HttpResponse.flush()

यह विधि एक HttpResponse उदाहरण फ़ाइल जैसी ऑब्जेक्ट बनाता है।

HttpResponse.tell() [source]

यह विधि एक HttpResponse उदाहरण फ़ाइल जैसी ऑब्जेक्ट बनाता है।

HttpResponse.getvalue() [source]

HttpResponse.content का मान लौटाता है। यह विधि एक HttpResponse उदाहरण को एक स्ट्रीम जैसी वस्तु बनाती है।

HttpResponse.readable()

हमेशा False । यह विधि एक HttpResponse उदाहरण को एक स्ट्रीम जैसी वस्तु बनाती है।

HttpResponse.seekable()

हमेशा False । यह विधि एक HttpResponse उदाहरण को एक स्ट्रीम जैसी वस्तु बनाती है।

HttpResponse.writable() [source]

हमेशा True । यह विधि एक HttpResponse उदाहरण को एक स्ट्रीम जैसी वस्तु बनाती है।

HttpResponse.writelines(lines) [source]

प्रतिक्रिया के लिए लाइनों की एक सूची लिखता है। लाइन विभाजक नहीं जोड़े जाते हैं। यह विधि एक HttpResponse उदाहरण को एक स्ट्रीम जैसी वस्तु बनाती है।

HttpResponse उपवर्ग

Django में कई HttpResponse उपवर्ग शामिल हैं जो विभिन्न प्रकार की HTTP प्रतिक्रियाओं को संभालते हैं। HttpResponse तरह, ये उपवर्ग django.http में रहते हैं।

class HttpResponseRedirect [source]

निर्माणकर्ता के लिए पहला तर्क आवश्यक है - पुनर्निर्देशित करने का मार्ग। यह एक पूरी तरह से योग्य URL हो सकता है (उदाहरण के लिए 'https://www.yahoo.com/search/' ), बिना डोमेन वाला कोई पूर्ण पथ (जैसे '/search/' ), या यहां तक ​​कि कोई सापेक्ष पथ (जैसे 'search/' ) का है। उस अंतिम स्थिति में, क्लाइंट ब्राउज़र वर्तमान पथ के अनुसार पूर्ण URL को फिर से बनाएगा। अन्य वैकल्पिक निर्माता तर्क के लिए HttpResponse देखें। ध्यान दें कि यह HTTP स्थिति कोड 302 देता है।

url

यह रीड-ओनली विशेषता उस URL का प्रतिनिधित्व करती है जो प्रतिसाद ( Location प्रतिसाद शीर्ष लेख के बराबर) पर पुनर्निर्देशित करेगा।

class HttpResponsePermanentRedirect [source]

HttpResponseRedirect तरह, लेकिन यह "पाया गया" रीडायरेक्ट (स्थिति कोड 302) के बजाय एक स्थायी रीडायरेक्ट (HTTP स्थिति कोड 301) देता है।

class HttpResponseNotModified [source]

कंस्ट्रक्टर किसी भी तर्क को नहीं लेता है और इस प्रतिक्रिया में कोई सामग्री नहीं जोड़ी जानी चाहिए। यह निर्दिष्ट करने के लिए उपयोग करें कि उपयोगकर्ता के अंतिम अनुरोध (स्थिति कोड 304) के बाद से पृष्ठ को संशोधित नहीं किया गया है।

class HttpResponseBadRequest [source]

HttpResponse तरह कार्य करता है लेकिन एक 400 स्थिति कोड का उपयोग करता है।

class HttpResponseNotFound [source]

HttpResponse तरह कार्य करता है लेकिन एक 404 स्थिति कोड का उपयोग करता है।

class HttpResponseForbidden [source]

HttpResponse तरह कार्य करता है लेकिन एक 403 स्थिति कोड का उपयोग करता है।

class HttpResponseNotAllowed [source]

जैसे HttpResponse , लेकिन एक 405 स्टेटस कोड का उपयोग करता है। निर्माता के लिए पहला तर्क आवश्यक है: अनुमत विधियों की सूची (जैसे ['GET', 'POST'] )।

class HttpResponseGone [source]

HttpResponse तरह ही कार्य करता है, लेकिन 410 स्थिति कोड का उपयोग करता है।

class HttpResponseServerError [source]

HttpResponse तरह ही कार्य करता है लेकिन एक 500 स्थिति कोड का उपयोग करता है।

ध्यान दें

यदि HttpResponse का एक कस्टम उपवर्ग एक render विधि को लागू करता है, तो Django इसे एक SimpleTemplateResponse अनुकरण करने के रूप में SimpleTemplateResponse , और render विधि को स्वयं एक मान्य प्रतिक्रिया ऑब्जेक्ट वापस करना होगा।

JsonResponse ऑब्जेक्ट्स

class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs) [source]

एक HttpResponse उपवर्ग जो JSON- एन्कोडेड प्रतिक्रिया बनाने में मदद करता है। यह कुछ अंतर के साथ अपने सुपरक्लास के अधिकांश व्यवहार को विरासत में देता है:

इसका डिफॉल्ट Content-Type हेडर application/json सेट है।

पहला पैरामीटर, data , एक dict उदाहरण होना चाहिए। यदि safe पैरामीटर False सेट है (नीचे देखें) यह कोई JSON-serializable ऑब्जेक्ट हो सकता है।

जो encoder , django.core.serializers.json.DjangoJSONEncoder को django.core.serializers.json.DjangoJSONEncoder , उसका उपयोग डेटा को क्रमबद्ध करने के लिए किया जाएगा। इस धारावाहिक के बारे में अधिक जानकारी के लिए JSON क्रमांकन देखें।

safe बूलियन पैरामीटर True को डिफॉल्ट करता है। यदि इसे False सेट किया जाता है, तो किसी भी वस्तु को क्रमांकन के लिए पारित किया जा सकता है (अन्यथा केवल dict उदाहरणों की अनुमति है)। यदि safe True और एक गैर- dict वस्तु को पहले तर्क के रूप में पारित किया जाता है, तो एक TypeError को उठाया जाएगा।

json_dumps_params पैरामीटर प्रतिक्रिया उत्पन्न करने के लिए उपयोग किए जाने वाले json.dumps() कॉल को पास करने के लिए कीवर्ड तर्कों का एक शब्दकोश है।

प्रयोग

विशिष्ट उपयोग की तरह लग सकता है:

>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'

गैर-शब्दकोश वस्तुओं को सीरियल करना

आदेश के अलावा अन्य वस्तुओं को अनुक्रमित करने के लिए आपको safe पैरामीटर को False सेट करना होगा:

>>> response = JsonResponse([1, 2, 3], safe=False)

safe=False पास किए बिना safe=False , एक TypeError उठाया जाएगा।

चेतावनी

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

डिफ़ॉल्ट JSON एनकोडर को बदलना

यदि आपको एक अलग JSON एनकोडर वर्ग का उपयोग करने की आवश्यकता है तो आप encoder पैरामीटर को कंस्ट्रक्टर विधि से पास कर सकते हैं:

>>> response = JsonResponse(data, encoder=MyJSONEncoder)

StreamingHttpResponse ऑब्जेक्ट्स

class StreamingHttpResponse [source]

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

प्रदर्शन के विचार

Django को अल्पकालिक अनुरोधों के लिए डिज़ाइन किया गया है। स्ट्रीमिंग प्रतिक्रियाएं प्रतिक्रिया की पूरी अवधि के लिए एक कार्यकर्ता प्रक्रिया को बाँधेंगी। इसके परिणामस्वरूप खराब प्रदर्शन हो सकता है।

आम तौर पर, आपको एक सुव्यवस्थित प्रतिक्रिया का सहारा लेने के बजाय, अनुरोध-प्रतिक्रिया चक्र के बाहर महंगे कार्य करने चाहिए।

StreamingHttpResponse HttpResponse उपवर्ग नहीं है, क्योंकि इसमें थोड़ा अलग API है। हालाँकि, यह लगभग उल्लेखनीय है, निम्नलिखित उल्लेखनीय अंतरों के साथ:

  • यह एक पुनरावृत्ति दिया जाना चाहिए जो सामग्री के रूप में तार देता है।
  • आप केवल प्रतिक्रिया ऑब्जेक्ट को पुनरावृत्त करके इसकी सामग्री तक नहीं पहुँच सकते। यह केवल तब होना चाहिए जब ग्राहक को प्रतिक्रिया लौटा दी जाए।
  • इसकी कोई content विशेषता नहीं है। इसके बजाय, इसकी एक streaming_content विशेषता है।
  • आप फ़ाइल जैसी ऑब्जेक्ट tell() या write() विधियों का उपयोग नहीं कर सकते । ऐसा करने से अपवाद बढ़ेगा।

StreamingHttpResponse केवल उन स्थितियों में उपयोग किया जाना चाहिए जहां यह पूरी तरह से आवश्यक है कि ग्राहक को डेटा स्थानांतरित करने से पहले पूरी सामग्री को पुनरावृत्त न किया जाए। क्योंकि सामग्री तक पहुँचा नहीं जा सकता है, कई मिडलवेयर सामान्य रूप से कार्य नहीं कर सकते हैं। उदाहरण के लिए ETag और Content-Length हेडर को स्ट्रीमिंग प्रतिक्रियाओं के लिए उत्पन्न नहीं किया जा सकता है।

गुण

StreamingHttpResponse.streaming_content

सामग्री का प्रतिनिधित्व करने वाले तार का एक पुनरावृत्त।

StreamingHttpResponse.status_code

HTTP स्थिति कोड प्रतिक्रिया के लिए।

जब तक reason_phrase स्पष्ट रूप से सेट नहीं किया जाता है, तब तक status_code कंस्ट्रक्टर के बाहर के मूल्य को संशोधित करना भी इसके मूल्य को संशोधित करेगा reason_phrase

StreamingHttpResponse.reason_phrase

प्रतिक्रिया के लिए HTTP कारण वाक्यांश। यह HTTP मानक के डिफ़ॉल्ट कारण वाक्यांशों का उपयोग करता है ।

जब तक स्पष्ट रूप से सेट नहीं reason_phrase किया जाता है, के मूल्य से निर्धारित होता है status_code

StreamingHttpResponse.streaming

यह हमेशा से है True

FileResponse वस्तुओं

class FileResponse(open_file, as_attachment=False, filename='', **kwargs) [source]

FileResponse StreamingHttpResponse बाइनरी फ़ाइलों के लिए अनुकूलित का उपवर्ग है । यह wsgi.file_wrapper का उपयोग करता है यदि wsgi सर्वर द्वारा प्रदान किया जाता है, अन्यथा यह फ़ाइल को छोटे विखंडनों में प्रवाहित करता है।

यदि as_attachment=True , Content-Disposition हेडर सेट है, जो ब्राउज़र को डाउनलोड के रूप में उपयोगकर्ता को फ़ाइल की पेशकश करने के लिए कहता है।

यदि open_file नाम नहीं है या यदि नाम open_file उचित नहीं है, तो filename पैरामीटर का उपयोग करके एक कस्टम फ़ाइल नाम प्रदान करें ।

Content-Length , Content-Type , और Content-Disposition जब वे की सामग्री से अनुमान लगाया जा सकता है हेडर स्वचालित रूप से स्थापित कर रहे हैं open_file

Django 2.1 में नया:

as_attachment और filename कीवर्ड तर्क जोड़ा गया था। इसके अलावा, हेडर FileResponse सेट करें Content यदि यह उन्हें अनुमान लगा सकता है।

FileResponse किसी भी फाइल जैसी वस्तु को बाइनरी कंटेंट के साथ स्वीकार करता है, उदाहरण के लिए एक फाइल बाइनरी मोड में खुली जैसे:

>>> from django.http import FileResponse
>>> response = FileResponse(open('myfile.png', 'rb'))

फ़ाइल स्वचालित रूप से बंद हो जाएगी, इसलिए इसे संदर्भ प्रबंधक के साथ न खोलें।

तरीके

FileResponse.set_headers(open_file) [source]
Django 2.1 में नया:

इस विधि स्वचालित रूप से प्रतिक्रिया आरंभीकरण के दौरान कहा जाता है और विभिन्न हेडर सेट किया गया है ( Content-Length , Content-Type , और Content-Disposition ) पर निर्भर करता है open_file

Original text