2010-11-18 25 views
3

Bu konu ile uğraşırken ortaya çıkan stratejilerin neler olduğunu merak ediyorum. Python/django çerçevesine yeniyim ve ajax isteklerinin (xhr) ele alınmasından hizmet sunumunu ayırmak istiyorum.Ajax isteklerini normal sayfa görüntülemelerinden ayıran python

xhrHandler.py adlı ayrı bir dosyaya sahip olmayı ve/POST/GET isteklerine/xhr/yöntem adına yönlendirmeyi düşünüyorum ve daha sonra görüntüleme işlemi için httprequest boyunca geçen görünümü döndürmek için views.py yöntemlerini delege edin.

Düşünceler?

cevap

3

request.is_ajax() denetleyin ve ihtiyacınız olan her yere delege verin. Örnek işleyici: İki durum için farklı işlevleri (farklı dosyalarda) arayabilirsiniz. Bunu egzersiz

def reroute_ajaxy(ajax_handler): 
    def wrap(f): 
     def decorate(*args, **kwargs): 
      if args[0].is_ajax(): 
       return ajax_handler(args) 
      else: 
       return f(*args, **kwargs) 
     return decorate 
    return wrap 

def score_ajax_handler(request): 
    print "score ajax handler" 


@reroute_ajaxy(score_ajax_handler) 
def score_handler(request): 
    print "score handler" 

Ve bazı sahte test: Eğer meraklısı olmak istiyorsanız

, başka yerde ajaxy istekleri sevk edecek işleyicisi için bir dekoratör kullanmak

class ReqMock: 
    def __init__(self, ajax=False): 
     self.ajax = ajax 
    def is_ajax(self): 
     return self.ajax 


score_handler(ReqMock(True)) 
score_handler(ReqMock(False)) 

üretir:

score ajax handler 
score handler 
+0

Hmm, Sanırım sorumu yeniden yazmalıyım. İsteklerin nasıl ele alınacağını biliyorum, sadece ajax işlemlerini görüntüleme işlemiyle ayırmada bazı stratejilerin neler olduğunu merak ediyordum. yani. view.py –

+0

'daki ajax isteklerini işlemek zorunda kalmama, onu görüntülemeden ziyade ayrı dosyalarda ele almayı önerdim. ya da daha iyi bir yolu var mı? –

+0

@Floetic: Önerdiğim dekoratör yaklaşımı, normal istek işleyicisindeki ajax'ın varlığını bilmenizi bile gerektirmiyor - bu, sarma işlevi tarafından yeniden yönlendiriliyor ve bunu farklı bir dosyaya yeniden yönlendirebilirsiniz. Bu istek için AJAX'ı desteklemek için 1 ekstra satır (dekoratör çağrısı) alır - views.py' üzerinde büyük bir yük gibi görünmüyor! –

İlgili konular