मैं वर्तमान में एक ऐप के लिए एक आरईएसटी एपीआई लिख रहा हूं जिस पर मैं काम कर रहा हूं। ऐप फ्लास्क का उपयोग कर अजगर में लिखा गया है। मैं निम्नलिखित है:पायथन फ्लास्क और कस्टम क्लाइंट त्रुटि संदेश
try:
_profile = profile(
name=request.json['name'],
password=profile.get_salted_password('blablabla'),
email=request.json['email'],
created_by=1,
last_updated_by=1
)
except AssertionError:
abort(400)
session = DatabaseEngine.getSession()
session.add(_profile)
try:
session.commit()
except IntegrityError:
abort(400)
त्रुटि हैंडलर इस तरह दिखता है:
@app.errorhandler(400)
def not_found(error):
return make_response(standard_response(None, 400, 'Bad request'), 400)
मैं त्रुटि 400 का उपयोग कर रहा दोनों एक SQLAlchemy मॉडल सत्यापनकर्ता और एक अद्वितीय बाधा जब साथ एक समस्या निरूपित करने के लिए डेटाबेस के लिए लेखन और दोनों ही मामलों में निम्न त्रुटि ग्राहक को भेजा जाता है:
{
"data": null,
"error": {
"msg": "Bad request",
"no": 400
},
"success": false
}
वहाँ एक रास्ता अभी भी बीच में बंद करें उपयोग करने के लिए (400 है) लेकिन किसी भी तरह से त्रुटि भी सेट करें ताकि त्रुटि हैंडलर परिणाम में त्रुटि ऑब्जेक्ट के लिए अतिरिक्त जानकारी जोड़ने का ख्याल रख सके?
मुझे यह पसंद है के साथ लाइन में और अधिक मानेंगे:
{
"data": null,
"error": {
"msg": "(IntegrityError) duplicate key value violates unique constraint profile_email_key",
"no": 400
},
"success": false
}
यूप, यह वह था जिसे मैं ढूंढ रहा था। क्या "कैच-ऑल" जैसे हैंडलर से जुड़ी त्रुटियों को पकड़ने का कोई तरीका नहीं है, इसलिए मैं इसे क्लाइंट को प्रारूपित और संभाल सकता हूं? – Asken
इसे मिला। '@ app.errorhandler (अपवाद)' – Asken
वह make_response और standard_response मेरे लिए काम नहीं करता है। लेकिन यह करता है: "def handle_sqlalchemy_error (err): err.message लौटें, 400" –