我想为异常做一些处理程序。我在python中使用了Flask-restless和SQLAlchemy的组合。
我的问题:
当我使用DB中已存在的对象向api发送请求时,SQLAlchemy显示异常:
IntegrityError: (IntegrityError) column <column_name> is not unique u'INSERT INTO ...
所以我尝试将属性validation_exceptions
添加到create_api
方法中:
manager.create_api( ... , validation_exceptions=[IntegrityError])
但是响应json包含:
{
"validation_errors": "Could not determine specific validation errors"
}
和服务器api显示异常:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\flask_restless\views.py", line 797, in _extract_error_messages
left, right = str(exception).rsplit(':', 1)
ValueError: need more than 1 value to unpack
Flask-restless中的异常验证不适用于此类异常(IntegrityError)
我该怎么办?是否可以为异常创建一些处理程序并在json中返回我自己的错误消息?
答案 0 :(得分:3)
documentation(截至本发布日期为v0.17.0)声明:
目前,Flask-Restless期望指定验证错误的实例将具有errors属性,该属性是字段映射字段名称到错误描述(注意:每个字段一个错误)。
因此,要更改 $(document).ready( function()
{
$('#list li').click(function() {
$("#mytextarea").insertAtCaret($(this).text());
return false
});
});
$.fn.insertAtCaret = function (myValue) {
return this.each(function(){
//IE support
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
//MOZILLA / NETSCAPE support
else if (this.selectionStart || this.selectionStart == '0') {
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos)+ myValue+ this.value.substring(endPos,this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
};
的内容,您的异常需要包含字典的 #sidediv li{cursor:pointer;}
属性。此词典的内容将在服务器响应中显示为 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="sidediv">
<ul id="list">
<li>Client first name</li>
<li>lastname</li>
<li>username</li>
</ul>
</div>
<textarea name="mytextarea" id="mytextarea" cols="70" rows="10">Hello!</textarea>
。
来自flask-restless/tests/test_validation.py:
validation_errors
请求:
errors
响应:
validation_errors
答案 1 :(得分:0)
您可以使用预处理器来捕获验证错误。
Error: PARSE ERROR: Encountered "traceonly" at line 1, column 15...
但我不确定这是一个很好的方法。