【发布时间】:2019-09-09 02:17:57
【问题描述】:
为了在 Flask 上构建动态用户更新路由,我使用 dunder __dict__ 迭代了用户 Flask SQLAlchemy 对象:
parameters = ['name'] # Valid parameters after the Regex filter was applied
for parameter in parameters:
user.__dict__[parameter] = request.form.get(parameter)
我这样做是为了避免使用ifs。为确保parameters 中仅存在有效参数,我应用了一个正则表达式模式,用于过滤在request 中接收到的有效参数以用于用户路由,并且我已在文档字符串中记录了这一方面。
我问是否使用__dict__ 遍历 Flask SQLAlchemy 对象是一种不好的做法,因为如果我打印user.__dict__,我会收到所有参数,即使是那些不在 Regex 过滤器上的参数,ig,密码、创建日期等;并且永远不应该通过这条路线更新。
我发现另一个 approach 使用获取 SQLAlchemy 中的所有列,但我认为最后它类似于我正在使用的方法...
Obs:实现的路由可以更新用户或所有用户的特定属性,使用相同的路由
【问题讨论】:
-
一般来说:从类外部直接访问特殊方法或双下划线括起来的 var 绝不是最佳实践。
-
太棒了,谢谢大家。我将尝试使用@lIja 指示的
setattr。 -
相关:stackoverflow.com/questions/23272789/…,一般来说最好使用运算符和可用函数而不是魔术方法和属性。
标签: python sqlalchemy flask-sqlalchemy