我不确定如何使用Google,但是基本上我有Flask Restful API,通常会返回如下响应:
在我的主文件中:
api.add_resource(my_package.MyClass,'/path/to/some/stuff')
然后在my_package.py中:
class MyClass(Resource):
def post(self):
return "hello world"
基本上,post方法用于处理发布到/path/to/some/stuff
的内容。但是我的代码变得越来越复杂,因此我想从post()
调用其他方法(不是API资源),例如:
class MyClass(Resource):
def validate_something(xyz)
...do some validation...
if (validation_fails):
return "Your validation has failed!"
def post(self):
validate_something(xyz)
return "hello world"
问题是,似乎我无法从我的代码返回(给打我API的用户)响应,除非它是在这些启用了API的方法(如post()
中)之一。当我返回“您的验证失败!”上面的代码不会传递给用户,它只会返回post()
作为返回值。我有什么办法可以基本上“升级” validate_something()
,使其直接返回响应?还是可以劫持return语句以指定是返回用户还是返回调用方法?
希望这很有道理。
答案 0 :(得分:0)
return
不会因某种魔术而吸引您的最终用户-客户端总是会从view方法中获取您返回的所有 。在视图中调用另一个函数不能强制您的视图方法返回,而必须显式地执行。
您可以执行以下操作:
class MyClass(Resource):
def validate_something(xyz)
...do some validation...
if (validation_fails):
return "Your validation has failed!"
def post(self):
validation = validate_something(xyz)
if validation is not None: # if validation passes, validate_something currently has no return value so it will return None
return validation
return "hello world"
但是,我不认为这可以带来更好的代码。理想情况下,您的validate_something
方法应该只有一项工作:验证。不形成最终用户的回应。让您的view方法来处理:
class MyClass(Resource):
def validate_something(xyz)
...do some validation...
if (validation_fails):
return False
return True
def post(self):
validated = validate_something(xyz)
if not validated:
return "Your validation has failed!"
return "hello world"
这是更好的关注点分离