2010-01-19 43 views
6

因此,我將Django與Google App Engine結合使用,並且我有一個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是非常類似於你和接受的解決方案是基本上創建一個全局的請求變量,並在將其轉換爲設置。

+0

對不起蘭斯,我不認爲我的工作做得很好解釋什麼問題是我原來的帖子。我已經更新了它......希望現在更清楚。 – ryan 2010-01-19 23:36:32

+1

我仍然認爲這個問題與變量範圍有關。我已經更新了我的答案以使用全局變量。 – 2010-01-19 23:45:49

+0

謝謝蘭斯。我的功能都在不同的.py文件,我真的不想去使用全局變量的路線。 – ryan 2010-01-20 17:02:42

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 , ...)