2015-01-12 8 views
7

के साथ एक कस्टम त्रुटि बढ़ाना, मैं the docs के बाद, फ्लास्क-रेस्टफुल का उपयोग करके एक कस्टम त्रुटि उठाने का प्रयास कर रहा हूं। परीक्षण उद्देश्यों के लिए, मैंने त्रुटियों में सटीक रूप से लिंक त्रुटियों को परिभाषित और पंजीकृत किया है: api = flask_restful.Api(app, errors=errors)फ्लास्क-आराम से

हालांकि

, जब मैं (जैसे) संसाधन मॉड्यूल के भीतर abort(409), फ़ायरबग विवरणों की मदद से कस्टम त्रुटि को बढ़ाने के लिए करना चाहते हैं:

{ "message": "Conflict", "status": 409 }

यह मानक 409 त्रुटि, कुछ भी कस्टम की तरह लगता है; दस्तावेज़ों से, मैं कस्टम त्रुटि संदेश की अपेक्षा करता हूं- "उस उपयोगकर्ता नाम वाला उपयोगकर्ता पहले से मौजूद है।"

मुझे लगता है कि मुझे त्रुटि को उठाने के बारे में कुछ याद आ रही है। क्या मुझे किसी भी तरह से शब्दकोश कुंजी का उपयोग करना चाहिए? Flask-Restful Source code की समीक्षा करने में मदद नहीं मिली, हालांकि मैंने कोशिश की।

+2

वही यहां। अगर मैंने 400 के लिए 3 अलग-अलग त्रुटियों को परिभाषित किया है, तो मैं उन त्रुटियों को कैसे बढ़ा सकता हूं? डॉक्टर में यह कहता है कि यह एपीआई फ़ंक्शन में प्रयास करने और पकड़ने को बचाता है, लेकिन मुझे स्पष्ट तरीका नहीं दिखता कि यह कैसे किया जा सकता है। – esdotzed

उत्तर

12

कुप्पी के RESTful के साथ एक मानक HTTP स्थिति कोड के लिए संदेश को परिभाषित करने के लिए, आप Werkzeug द्वारा प्रदान की HTTP अपवाद हैं, जिस पर बोतल आधारित है में से एक को फिर से परिभाषित करना होगा।

अपने प्रश्न के बाद, यहाँ Conflict exception ओवरराइड करने के लिए एक उदाहरण है: इसलिए

errors = { 
    'Conflict': { 
     'message': "A user with that username already exists.", 
     'status': 409, 
    }, 
} 

app = Flask(__name__) 
api = flask_restful.Api(app, errors=errors) 

, हर बार जब आप abort(409) फोन करेगा, यह एक प्रतिनिधित्व सही MediaType में लौटने के लिए, और परिभाषित संदेश के साथ होगा।

हालांकि, इस विधि का उपयोग करके, किसी भी स्थान पर आप 409 स्थिति कोड के साथ निरस्त हो जाएंगे, यह उपयोगकर्ता नाम के साथ पहले से मौजूद उपयोगकर्ता के बारे में एक संदेश लौटाएगा। जब आप abort(409) पर कॉल करते हैं तो यह संभव नहीं है कि आप उपयोगकर्ताओं के मुकाबले अन्य संसाधनों से संबंधित हों।

तो, मैं सलाह देने के लिए इस प्रकार आप बस कुप्पी के RESTful की abort विधि का उपयोग करने, हर बार जब आप एक कस्टम संदेश प्रदान करना चाहते हैं:

from flask.ext.restful import abort 

abort(409, description="A user with that username already exists.") 

सामान्य शब्दों में, को परिभाषित करते हुए कुप्पी के RESTful का विस्तार जब आप कस्टम अपवाद बढ़ाते हैं तो कस्टम त्रुटि संदेश उपयोगी होते हैं (raise(), abort() नहीं) जो वेरकेज़ग द्वारा प्रदत्त HTTP exceptions में नहीं हैं।

+1

मुझे उपरोक्त के साथ बहुत सी परेशानी हो रही है: *** TypeError: abort() बिल्कुल 1 तर्क लेता है (2 दिया गया) – Kelvin

+0

@ केल्विन सुनिश्चित करें कि आप फ्लास्क से निरस्त आयात आयात करें और flask_restful से नहीं। यही कारण है कि मुझे यह त्रुटि मिली। – herrherr

संबंधित मुद्दे