2010-08-17 6 views
24

मैं बोतल अनुरोध हैंडलर से जेसन डेटा लौटने के बारे में कैसे जा सकता हूं। मैं बोतल स्रोत में एक dict2json विधि देखता हूं लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए।बोतल और जेसन

दस्तावेज में क्या है:

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

मुझे इस देता है जब मैं पृष्ठ लाने:

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

I फ्लास्क पर चले गए और यह ठीक काम करता है। – arinte

+0

आप आयात जेसन का उपयोग भी कर सकते हैं तो json.dumps (dict)। लेकिन अच्छी चाल, मैं बोतल और फ्लास्क के बीच भी जाता हूं और फ्लास्क चुनने का अंत करता हूं। मुझे बोतल हल्का वजन है और इसके पीछे एक बड़ा ढांचा नहीं है। लेकिन टाइप किए गए यूआरएल पैराम्स जैसी चीजें हमेशा मुझे डेट डिटेक्शन या इंडेक्स जैसे ब्लॉग/////जहां बोतल केवल है: परम नामों के लिए मुझे वापस जीतें। तो 4 स्लेश के साथ एक रास्ता हमेशा एक तारीख/ब्लॉग प्रकार यूआरएल नहीं है। मैं दोनों का उपयोग करता हूं लेकिन वर्तमान में इस तरह की चीजों के कारण बड़े ऐप्स के लिए फ्लास्क करता हूं। –

+0

मुझे यह समस्या भी है। जब मैं कर्ल-आई का उपयोग करता हूं, तो मुझे लगता है कि सामग्री का प्रकार गलत है: सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; charset = UTF-8 –

उत्तर

43

बस एक dict लौट आते हैं। बोतल आपके लिए जेएसओएन में रूपांतरण को संभालती है।

यहां तक ​​कि शब्दकोशों को भी अनुमति है। उन्हें जेसन में परिवर्तित कर दिया गया है और सामग्री-प्रकार हेडर सेट के साथ एप्लिकेशन/जेसन पर लौटा दिया गया है। इस सुविधा को अक्षम करने के लिए (और अपने मिडलवेयर पर डिकेट पास करें) आप बोतल.डेफॉल्ट_एप()। ऑटोजसन को गलत पर सेट कर सकते हैं।

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

मेरे लिए पूरी तरह से अच्छी तरह से से the documentation.

लिया http://bottlepy.org/docs/stable/api.html#the-bottle-class

+2

यह वास्तव में –

+4

प्रश्न का उत्तर नहीं देता है? यह निश्चित रूप से करता है ... –

3

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) 
+0

यह मेरे लिए काम नहीं करता है। मैंने समय आयात किया। मुझे लगता है कि यह एक संस्करण से संबंधित व्यवहार का परिवर्तन है। –

6

किसी कारण से, बोतल की स्वत: 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 
+0

यह मेरे लिए शब्दकोशों के सरणी वापस करने के लिए बहुत अच्छा काम करता है, जिन्हें बोतल –

+1

द्वारा नियंत्रित नहीं किया जाता है, आपको शब्दकोशों की एक सूची वापस नहीं आनी चाहिए, यही कारण है कि बोतल इसे इतना कठिन बनाता है (और फ्लास्क भी)। यहां देखें: http://flask.pocoo.org/docs/security/#json-security –

+0

वाह, इसे इंगित करने के लिए धन्यवाद। –

0

के रूप में इरादा कोशिश यह चाहिए काम करता है

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

यह करने के लिए आसान है बोतल के अनुरोध मॉड्यूल का उपयोग करके जेसन प्राप्त करें

from bottle import request 

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