flask - 从 Flask 中的辅助方法返回 HTTP 响应
问题描述
我不知道如何用谷歌搜索,但基本上我有一个 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
. 但是我的代码变得有点复杂,所以我想从 调用其他方法(不是 API 资源)post()
,例如:
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
不会通过某种魔法与您的最终用户联系起来 - 客户端总是会得到您从视图方法返回的任何内容。在您的视图中调用另一个函数不能强制您的视图方法返回,您必须明确地执行此操作。
你可以这样做:
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
方法应该只有一项工作:验证。不形成最终用户响应。让您的视图方法处理:
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"
这是一个更好的关注点分离
推荐阅读
- c++ - Namespace::* 和传统的 * 有什么区别吗?
- javascript - 如何使用 JavaScript 更改 URL
- reactjs - 处理对象数组中的多个输入
- excel - 如何通过 VBA 在 Outlook 邮件正文中标记收件人?
- python - 随机中断、传递和继续语句 Python
- cron - Cronjob 将日期戳添加到文件未运行
- sql-server - Azure 流分析 - SQL - 显示 0 行加入参考输入和 SQL Server 参考输入
- flutter - 即使我使用了 MediaMediaQuery,容器高度也不完全占用
- android - 我下载了这个文件 kotlin-stdlib-jdk8-1.3.72.pom 但我不知道我可以保存在哪里
- amazon-web-services - Route 53 别名记录未指向 S3 静态托管网站