- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想做一些异常处理程序。我在 python 中结合使用了 Flask-reSTLess 和 SQLAlchemy。
我的问题:
当我使用数据库中已存在的对象向 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 中返回我自己的错误消息?
最佳答案
documentation (v0.17.0 到此发布日期)状态:
Currently, Flask-Restless expects that an instance of a specified validation error will have a errors attribute, which is a dictionary mapping field name to error description (note: one error per field).
因此,要更改 validation_errors
的内容,您的异常需要一个包含字典的 errors
属性。此字典的内容将作为 validation_errors
出现在服务器响应中。
来自 flask-restless/tests/test_validation.py :
class TestSimpleValidation(ManagerTestBase):
"""Tests for validation errors raised by the SQLAlchemy's simple built-in
validation.
For more information about this functionality, see the documentation for
:func:`sqlalchemy.orm.validates`.
"""
def setup(self):
"""Create APIs for the validated models."""
super(TestSimpleValidation, self).setup()
class Person(self.Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
age = Column(Integer, nullable=False)
@validates('age')
def validate_age(self, key, number):
if not 0 <= number <= 150:
exception = CoolValidationError()
exception.errors = dict(age='Must be between 0 and 150')
raise exception
return number
@validates('articles')
def validate_articles(self, key, article):
if article.title is not None and len(article.title) == 0:
exception = CoolValidationError()
exception.errors = {'articles': 'empty title not allowed'}
raise exception
return article
class Article(self.Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True)
title = Column(Unicode)
author_id = Column(Integer, ForeignKey('person.id'))
author = relationship('Person', backref=backref('articles'))
self.Article = Article
self.Person = Person
self.Base.metadata.create_all()
self.manager.create_api(Article)
self.manager.create_api(Person, methods=['POST', 'PATCH'],
validation_exceptions=[CoolValidationError])
要求:
data = dict(data=dict(type='person', age=-1))
response = self.app.post('/api/person', data=dumps(data))
响应:
HTTP/1.1 400 Bad Request
{ "validation_errors":
{
"age": "Must be between 0 and 150",
}
}
关于python - 如何在 Flask-reSTLess 中返回 "already exists"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547712/
我有两个 Flask-SQLAlchemy 模型和各自的 Flask-ReSTLess API 端点,如下所示: class Person(db.Model): person_id = db.
我最近使用 Flask-ReSTLess 创建 API。 当我尝试查询 API 时,我在 Web 浏览器 (firefox) 上收到“无法构建查询”的错误消息。这是查询: http://localho
我在使用 Flask RESTless 时遇到了一些小问题,也许你可以帮助我 :) 我的 SQL(和 SQLAlchemy)中有一些表是 N..N 关系的结果,它们的主键是两列的总和。例如 Table
我有一个后端应用程序 flask-restless它会回复一些 json 数据。设置正确。我通过 $.ajax 函数从 javascript 请求这些数据。它与一个过滤器完美配合,我需要更多过滤器,但
我有这两个模型(使用 Flask-SQLAlchemy 定义): class BankAccount(db.Model): id = db.Column(db.Integ
安静和不安之间的基本区别是什么,我读过一些文章,人们似乎可以互换使用它们。 最佳答案 REST 代表 REpresentational State Transfer,有点像这样: 我们有一堆唯一可寻址
我和一个 friend 一直在阅读 Flask-RESTless 的文档,它说: The arguments to the preprocessor and postprocessor functio
我正在使用 Flask-ReSTLess 制作一个 super 简单的 REST API。我想添加身份验证,但仅用于 put/post/delete 调用,而我想将 get 调用保留为公开。 到目前为
我一直在寻找有关如何自动启动我的 GlassFish 服务器以及其上的 RESTful 应用程序的说明。我通过 NetBeans IDE 安装它,我通常通过 NetBeans 控制它,但我需要从开发环
我想从 flask reSTLess 中返回一个自定义属性,例如 class Item(db.Model): creator_id = db.Column(db.Integer, db.For
我正尝试按照 docs 的建议使用带有 Marshmallow 的自定义反序列化器排除 Flask-ReSTLess API 中的列: 序列化器.py class HeatSchema(Schema)
我正在使用 Flask-ReSTLess 0.17.0 并且无法获得 preprocessor or postprocessor function开火。作为引用,我有一个 SQLAlchemy 模型,
根据documentation ,搜索查询应如下所示: GET /api/person?q={"filters":[{"name":"age","op":"ge","val":10}]} 如何比较日期
我有这样的东西: { "id": 1, "username": "plasmy", "userdetails": [ { "detail": "A Name",
我正在尝试学习如何在 pythonanywhere 上提供的 Flask 应用程序和 mysql 数据库中提供数据。 我添加了一条到/test 的路由,该路由旨在连接到现有的 mysql 数据库表,然
我正在尝试构建一个在 Google App Engine 上运行的 RESTful Web 服务。我遇到了两个可能有用的项目, RESTless (Xydra) RESTeasy 当我尝试检查其中任何
我安装了一个 Flask 应用程序,正在运行 Flask-reSTLess API以下命令执行成功: curl -H "Content-type: application/json" -X POST
当我尝试使用curl 使用 unicode 字段创建模型实例时,出现 UnicodeEncodeError 这是我的代码,为了简单起见,我将其放在一个文件中: import flask import
我是 Python 新手,正在探索 Flask 框架。 我正在使用 Flask Restful 开发一个简单的基于 Rest 的 API。现在,我发现的最大挑战是将 SQL Alchemy 模型类用于
我正在使用 Flask-ReSTLess 构建一个 API,它需要一个 API key ,该 key 将位于 Authorization HTTP header 中。 在 Flask-ReSTLess
我是一名优秀的程序员,十分优秀!