سؤال
كيف يمكنني إرجاع بيانات JSON من معالج طلب الزجاجة. أرى طريقة DICT2JSON في زجاجة SRC ولكني لست متأكدًا من كيفية استخدامها.
ما هو في الوثائق:
@route('/spam')
def spam():
return {'status':'online', 'servertime':time.time()}
يعطيني هذا عندما أحضر الصفحة:
<html>
<head></head>
<body>statusservertime</body>
</html>
المحلول
ما عليك سوى إرجاع القولون. تعالج الزجاجة التحويل إلى JSON لك.
حتى القواميس مسموح بها. يتم تحويلها إلى JSON وإعادتها برأس من نوع المحتوى المُعين على Application/JSON. لتعطيل هذه الميزة (وتمرير الرسائل إلى الوسيطة الخاصة بك) ، يمكنك تعيين bottle.default_app (). autojson إلى false.
@route('/api/status')
def api_status():
return {'status':'online', 'servertime':time.time()}
مأخوذ من وثائق.
نصائح أخرى
لسبب ما ، لا تعمل ميزة Bottle's Auto-Json. إذا لم ينجح ذلك أيضًا ، فيمكنك استخدام هذا الديكور:
def json_result(f):
def g(*a, **k):
return json.dumps(f(*a, **k))
return g
مفيد أيضا:
def mime(mime_type):
def decorator(f):
def g(*a, **k):
response.content_type = mime_type
return f(*a, **k)
return g
return decorator
return {'status':'online', 'servertime':time.time()}
يعمل بشكل جيد بالنسبة لي. هل استوردت time
?
هذا يعمل:
import time
from bottle import route, run
@route('/')
def index():
return {'status':'online', 'servertime':time.time()}
run(host='localhost', port=8080)
جرب هذا يجب أن يعمل على النحو المقصود
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)
من السهل الحصول على JSON باستخدام وحدة طلب الزجاجة
from bottle import request
json_data = request.json # json_data is in the dictionary format