2010-01-19 13 views
6

Django'yu Google App Engine ile kullanıyorum ve her bir URL'yi karşılık gelen bir yönteme yönlendiren bir urls.py dosyası var. Bu yöntemlerin her biri otomatik olarak bir "HttpRequest nesnesi" olduğuna inandığım argümanlardan biri olarak "istek" iletilir.Django'da bir istek nesnesini nasıl oluştururum?

Bu kalabalık istek nesnesini kodumdan nasıl oluştururum? Örneğin, kodumun derinliklerinde bir yöntemdeysem, kullanılabilir olduğundan emin olmak için her işleve geçmek zorunda kalmadan bu istek nesnesine erişmeyi isterim. urls.py yöntem foo aramaları varsayarsak, Şu anda bunu yapıyorum yoludur: Ben var sadece o kadar buna ihtiyacı yoktur işlevleriyle isteği geçmek zorunda olduğum için

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 

Bu yanlış geliyor baz olarak mevcut. Ben yoksa etrafında isteği geçemedi

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

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

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

yani:

ben böyle bir şey yapmak istiyorum. Ancak, request = HttpRequest() , boş bir istek nesnesi döndürür ... istediğim, urls.py adlı her bir yönteme geçirilen gibi, tam olarak doldurulmuş bir sürümdür.

HttpRequest belgelerine göz attım: http://docs.djangoproject.com/en/dev/ref/request-response/ Ancak bunu yapmanın yolunu görmedim.

Herhangi bir düşünce büyük takdir edilecektir.

sayesinde Ryan

cevap

0

Sadece görünüm tanımları önce bir istek değişken oluşturmak ve (sizin örnek kodu kullanarak) görünümden aldığınızda değerini ayarlayın:

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 

Bkz: Notes on Python variable scope

Güncelleme:This question sizinkilere çok benzemektedir ve kabul edilen çözüm temelde global bir talep değişkeni oluşturmakta ve ayarlara bağlayarak.

+0

Üzgünüm Lance, ben sorunu benim orijinal yayından içinde ne açıklayan iyi bir iş yaptı sanmıyorum: Burada

bir Projemde kullanılan bir örnektir. Güncellemesinden bu yana ... umarım artık daha nettir. – ryan

+1

Yine de sorunun değişken kapsamıyla ilgili olduğunu düşünüyorum. Global değişken kullanmak için cevabımı güncelledim. –

+0

Teşekkürler Lance. İşlevlerim hepsi farklı .py dosyalarında ve gerçekten global bir değişken kullanma yoluna gitmek istemiyorum. – ryan

1

request = HttpRequest() size boş bir tane verecektir, ancak bir şeyler yazabilirsiniz.

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 , ...) 
İlgili konular