2009-11-23 10 views

cevap

7

Git WebOb paketine bir göz. Bu wsgi.input aranabilir hale getirilmesi gerektiğini belirlemek için izin veren işlevsellik sağlar. Bu, içeriğin farklı işleyici aracılığıyla yeniden oynatılabileceği şekilde giriş akışını geri almanıza izin verme etkisine sahiptir. WebOb'u kullanmasanız bile, bunu yapmanın yolu, Ian'ın bunu uygun bir şekilde yapması gerektiğine dair öğretici olmalıdır. Belgelerindeki arama sonuçları için here'a gidin.

1

Eğer kalacaksın, her zaman, bunu okumak okuduğunuz şeyler bir CStringIO file benzeri bir nesne oluşturmak ve sonra bu gibi geri atayabilirsiniz bir çırpıda okudum:

import cStringIO 
import copy 
lines = [] 
for line in environ['wsgi.input']: 
    lines.append(line) 
newlines = copy.copy(lines) 
environ['wsgi.input'] = cStringIO.StringIO(''.join(newlines)) 
Eğer (gibi yazılan veri muptiple kez okundu) önemsiz olmayan bir şey yapmak istiyorsanız

Yapabilirsin

+0

Ve bobince :) –

+0

verimsiz bir wsgi.input üzerinde döngü içinde bu olabilir benzerleri için/çok bellek/saat kullanma Bunu yapmanın daha verimli bir yol _is_. Çünkü en kötü durumda tüm verilerin boş satırlardan oluştuğu büyük bir dosyaya sahip olsaydınız, her girişin tek bir karakter olduğu çok büyük bir liste oluşturursunuz. Ayrıca neden copy.copy() ile uğraştığınızdan emin değilsiniz. –

10

... genel bulmak WSGI sonrası malzeme oldukça kırılgan Orada büyük olasılıkla bunu yapmak için daha etkili bir yol, ama ben çevrede geri akışın bir dosya benzeri çoğaltma koymayı deneyin:

Bunu yapmak gereği duyulabilir

olsa bir koku biraz. İdeal olarak, sadece bir parça kod sorgu dizisini ve post gövdeyi ayrıştırmalı ve sonuçları diğer bileşenlere iletmelidir.

+0

İçerik uzunluğunu -1 olarak alabilmek için güvenmemelisiniz. WSGI belirtiminde bir uygulamanın, tüm girişi okumak anlamına gelen read() 'ı argüman olarak -1 kabul etmesi gerektiğini belirten hiçbir şey yoktur. Bir uygulama, bu durumda bir istisna oluşturmaya karar verebilir. Aslında, şartname, CONTENT_LENGTH öğesinin mevcut olmaması veya boş olması durumunda, "0" anlamına gelmesi veya girişin mevcut olmaması gerektiği şeklinde yorumlanabileceğini söyler. –

+0

Ah evet ... bunu neden söylediğimden emin değilim, kendi gerçek kodumu kullanıyorum 0 :-) Bu davranışı WSGI'de değiştirmek niyetindesiniz, değil mi? – bobince

+0

WSGI'nin şu anda herhangi bir değişiklik göreceğinden şüphem var. –

İlgili konular