2010-01-19 23 views
6

तो मैं Google ऐप इंजन के साथ Django का उपयोग कर रहा हूं और मेरे पास एक urls.py फ़ाइल है जो प्रत्येक यूआरएल को इसी विधि पर रीडायरेक्ट करती है। उन तरीकों में से प्रत्येक स्वचालित रूप से "अनुरोध" को तर्कों में से एक के रूप में पारित कर दिया जाता है, जो मुझे लगता है कि एक HttpRequest वस्तु है।मैं Django में एक अनुरोध ऑब्जेक्ट कैसे बना सकता हूं?

मैं अपने कोड के भीतर से इस जनसंख्या अनुरोध ऑब्जेक्ट को कैसे बना सकता हूं? उदाहरण के लिए, यदि मैं अपने कोड में गहराई से कुछ विधि के भीतर हूं, तो मैं यह सुनिश्चित करने के लिए कि यह उपलब्ध है, मैं प्रत्येक फ़ंक्शन को पास किए बिना इस अनुरोध ऑब्जेक्ट तक पहुंच प्राप्त करना चाहता हूं। urls.py मान लिया जाये कि विधि foo कॉल, जिस तरह से मैं वर्तमान में यह कर रहा हूँ है:

foo(request): 
    # stuff here 
    bar(request) 
    # more stuff here 

bar(request): 
    # stuff here<stuff> 
    baz(request) 
    # more stuff here 

baz(request): 
    do something with request here 

यह गलत लगता है क्योंकि मैं कार्यों कि इसकी आवश्यकता नहीं है बस इतना है कि मैं के माध्यम से अनुरोध पारित करने के लिए आ रही हैं यह बाज़ में उपलब्ध है।

foo(request): 
    # stuff here 
    bar() 
    # more stuff here 

bar(): 
    # stuff here 
    baz() 
    # more stuff here 

baz(): 
    request = HttpRequest() 
    do something with request here 

अर्थात अनुरोध के आसपास पारित नहीं करता है, तो मैं की जरूरत नहीं है:

मैं की तरह कुछ करने के लिए करना चाहते हैं। हालांकि, अनुरोध कर रहा है = HttpRequest() एक खाली अनुरोध ऑब्जेक्ट देता है ... जो मैं चाहता हूं वह पूरी तरह से आबादी वाला संस्करण है, जैसे urls.py से प्रत्येक विधि में क्या पारित किया जाता है।

मैंने यहां HttpRequest के लिए प्रलेखन के माध्यम से देखा: http://docs.djangoproject.com/en/dev/ref/request-response/ लेकिन इसे करने का तरीका नहीं देखा।

किसी भी विचार की सराहना की जाएगी।

धन्यवाद, रयान

उत्तर

0

बस दृश्य परिभाषाओं से पहले एक अनुरोध चर बना सकते हैं और अपने मूल्य निर्धारित किया है जब आप दृश्य से इसे प्राप्त (अपने उदाहरण कोड का उपयोग कर):

current_request = None 

foo(request): 
    current_request = request 
    # stuff here 
    bar() 
    # more stuff here 

bar(): 
    # stuff here 
    baz() 
    # more stuff here 

baz(): 
    # do something with currest_request here 

देखें: Notes on Python variable scope

अद्यतन:This question आपके जैसा ही है और स्वीकृत समाधान मूल रूप से वैश्विक अनुरोध चर बना रहा है और इसे सेटिंग्स में taching।

+0

क्षमा लांस, मुझे नहीं लगता कि मैं एक अच्छा काम समझा क्या इस मुद्दे को अपने मूल पोस्टिंग में था है:

यहाँ एक उदाहरण मैं अपने प्रोजेक्ट में प्रयोग किया जाता है। मैंने इसे अपडेट कर लिया है ... उम्मीद है कि अब यह स्पष्ट है। – ryan

+1

मुझे अभी भी लगता है कि सवाल को चरणीय दायरे से करना है। मैंने वैश्विक चर का उपयोग करने के लिए अपना जवाब अपडेट कर लिया है। –

+0

धन्यवाद लांस। मेरे काम सभी अलग-अलग .py फाइलों में हैं, और मैं वास्तव में वैश्विक चर का उपयोग करने का मार्ग नहीं जाना चाहता हूं। – ryan

1

request = HttpRequest() आपको एक खाली व्यक्ति देगा, लेकिन आप इसे कुछ लिख सकते हैं।

def new(request): 
    ... 
    newrequest = HttpRequest() 
    newrequest.method = 'GET' 
    newrequest.user = request.user 
    resp = result_email(newrequest , obj-id , token) 
    send_email(resp , ...) 
    return HttpResponseRedirect(...) 
    ... 
def result_email(request , ...): 
    ... 
    return render(request , ...) 
संबंधित मुद्दे

 संबंधित मुद्दे