2010-08-17 14 views
24

Nasıl bir şişe isteği işleyicisinden json verilerini dönen yaparsınız. Şişe src'de bir dict2json yöntemi görüyorum ama nasıl kullanacağımı bilmiyorum.Şişe ve Json

belgelerinde nedir:

<html> 
    <head></head> 
    <body>statusservertime</body> 
</html> 
+1

I şişeye taşındı ve iyi çalışıyor. – arinte

+0

Ayrıca içe aktarma jsonunu sonra json.dumps (dict) kullanabilirsiniz. Ama iyi bir hamle, ayrıca şişe ve şişe arasında gidip, biberon seçiyorum. Şişenin hafif olmasını ve arkasındaki daha büyük bir çerçeveye sahip olmamayı seviyorum. param isimleri: Ama daktilo url params gibi şeyler hep tarih tespiti veya endeksler yani/blog// ///şişe yalnızca vardır gibi şeyler yapmak için beni geri kazanmak. Dolayısıyla, 4 eğik çizgi içeren bir yol her zaman bir tarih/blog türü URL'si değildir. Ben her ikisini de kullanıyorum ama şu anda böyle şeyler nedeniyle büyük uygulamalar için flask eğilimindedir. –

+0

Ben de bu problemi yaşıyorum. Curl -I kullanırken, içerik türünün yanlış olduğunu görüyorum: Content-Type: text/html; charset = UTF-8 –

cevap

43

Sadece bir dicti dönmek: Ben sayfasını getirmek zaman

@route('/spam') 
def spam(): 
    return {'status':'online', 'servertime':time.time()} 

bana bu verir. Şişe sizin için JSON'a dönüştürmeyi gerçekleştirir.

bile sözlükleri izin verilir. Bunlar json'a dönüştürülür ve application/json olarak ayarlanan Content-Type üstbilgisiyle döndürülür. Bu özelliği devre dışı bırakmak için (ve komut dosyalarını ara yazılımınıza aktarın) bottle.default_app(). Autojson öğesini False olarak ayarlayabilirsiniz.

@route('/api/status') 
def api_status(): 
    return {'status':'online', 'servertime':time.time()} 

benim için gayet iyi the documentation.

den http://bottlepy.org/docs/stable/api.html#the-bottle-class

+2

Bu aslında soruyu –

+4

Ne cevap vermiyor? Kesinlikle ... –

3

return {'status':'online', 'servertime':time.time()} eser alınmış. time'u içe aktardınız mı?

Bu çalışır: Nedense

import time 
from bottle import route, run 

@route('/') 
def index(): 
    return {'status':'online', 'servertime':time.time()} 

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

Bu benim için işe yaramadı. İthalat zamanı yaptım. Sanırım sürümle ilgili bir davranış değişikliği. –

6

, şişenin otomatik json özelliği benim için çalışmaz.

from bson.json_util import dumps 
from bottle import route, run 
import time 

@route('/') 
def index(): 
    return {'status':'online', 'servertime':dumps(time.time()) } 

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

me şişe o kadar zor (ve Şişesi yanı) yapar neden sözlükler listesi, dönen edilmemelidir –

+1

Şişe tarafından işlenmez sözlükler, diziler dönmek için bu büyük çalıştı. Buraya bakın: http://flask.pocoo.org/docs/security/#json-security –

+0

Vay, bu işaret için teşekkürler. –

0

bu should eserlerini deneyin: kullanışlı Ayrıca

def json_result(f): 
    def g(*a, **k): 
     return json.dumps(f(*a, **k)) 
    return g 

: o da sizin için işe yaramazsa, bu dekoratör kullanabilirsiniz şişenin istek modülünü kullanarak json'u edinin

from bottle import request 

json_data = request.json # json_data is in the dictionary format 
0

o kolaydır amaçlandığı gibi

def mime(mime_type): 
    def decorator(f): 
     def g(*a, **k): 
      response.content_type = mime_type 
      return f(*a, **k) 
     return g 
    return decorator