2013-02-20 15 views
14

bottle.py ile POST isteğini okumada sorun yaşıyorum.Bottle.py ile POST gövdesinin okunması

Gönderilen istekte, metinde bir metin var. 29: https://github.com/kinetica/tries-on.js/blob/master/lib/game.js numaralı hattan nasıl yapıldığını görebilirsiniz.

Ayrıca, node tabanlı bir istemcide 4: https://github.com/kinetica/tries-on.js/blob/master/masterClient.js numaralı satırda nasıl okunduğunu da görebilirsiniz. Ancak, bu davranışı bottle.py temelli istemcimde taklit edemedim. docs, ham gövdeyi dosya benzeri bir nesne ile okuyabileceğimi, ancak ne request.body üzerinde bir for döngüsü kullanarak ne de request.body adlı readlines yöntemini kullanamadığımı söylüyor.

İstek, @route('/', method='POST') ile dekore edilmiş bir işlevde işleniyor ve istekleri doğru olarak geliyor.

Şimdiden teşekkürler.


DÜZENLEME:

tam script:

from bottle import route, run, request 

@route('/', method='POST') 
def index(): 
    for l in request.body: 
     print l 
    print request.body.readlines() 

run(host='localhost', port=8080, debug=True) 
+0

Ben 'StringIO' nesneyi geri sarmak için gerekli olduğunu sanıyordum ama gerekli değil. Python işlevlerini sorunuza ekler misiniz? –

+0

Tabii ki. Cevabı güncelledim. Teşekkürler, @ A.Rodas –

+0

Taleplerin doğru geldiğini nereden biliyorsunuz? Burada göstermiş olduğunuz kod için çıktı ve/veya geri dönüş nedir? –

cevap

13

Eğer postdata = request.body.read() basit denediniz mi?

Aşağıdaki örnek, günlük dosyasında gövdesinin (istemciye) Ham içeriğe yazdırır request.body.read()

kullanarak ham biçimde yayınlanan verileri okumak gösterir.

Form özelliklerinin erişimini göstermek için istemciye "name" ve "soyad" ifadelerini ekledim.

test için komut satırından bukle müşteri kullandı:

$ curl -X POST -F name=jan -F surname=vlcinsky http://localhost:8080 

benim için çalışıyor kod:

from bottle import run, request, post 

@post('/') 
def index(): 
    postdata = request.body.read() 
    print postdata #this goes to log file only, not to client 
    name = request.forms.get("name") 
    surname = request.forms.get("surname") 
    return "Hi {name} {surname}".format(name=name, surname=surname) 

run(host='localhost', port=8080, debug=True) 
+0

POST bazı dosyalar eklendiğinde bu karmaşıklaşıyor ... –

İlgili konular