Python 是否可以通过对象';你的字典是什么?
我尝试了以下代码,但无效:Python 是否可以通过对象';你的字典是什么?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我尝试了以下代码,但无效: class SourceUpdate(webapp.RequestHandler): def post(self): id = int(self.request.get('id')) source = Source.get_by_id(id) for property in self.request.arguments(): if property != 'id': source.__dict__[propert
class SourceUpdate(webapp.RequestHandler):
def post(self):
id = int(self.request.get('id'))
source = Source.get_by_id(id)
for property in self.request.arguments():
if property != 'id':
source.__dict__[property] = self.request.get(property)
source.put()
self.redirect('/source')
我发布了所有必要的属性,但是条目没有更新,也没有显示错误。如何修复它
顺便说一句
您绕过了模型的元类(
type(type(source))
)通常用于正确处理属性设置的类似于\uuuuuuu setattr\uuuuuuuuuu的功能。将内部循环更改为:
for property in self.request.arguments():
if property != 'id':
setattr(source, property, self.request.get(property))
而且一切都应该正常工作(如果所有类型的属性都可以从一个字符串中正确设置,因为这是从request.get
)中得到的)。您绕过了模型元类(type(type(source))
提供的类似\uuuuuuuuuuuuuuuuu属性的功能通常用于正确处理属性设置。将内部循环更改为:
for property in self.request.arguments():
if property != 'id':
setattr(source, property, self.request.get(property))
而且一切都应该正常工作(如果所有类型的属性都可以从一个字符串中正确设置,因为这是从request.get
)中获得的)。与直接从请求中设置模型值不同,您可能希望使用Django表单。它们与appengine捆绑在一起,便于验证表单数据并将其存储在数据存储中,以及生成表单HTML。有一篇文章介绍了如何在应用程序引擎数据存储中使用它们
另外,不要忘记,基于GET请求进行更改几乎总是一个坏主意,并且会导致XSRF漏洞和其他问题 您可能希望研究使用Django表单,而不是直接从请求中设置模型值。它们与appengine捆绑在一起,便于验证表单数据并将其存储在数据存储中,以及生成表单HTML。有一篇文章介绍了如何在应用程序引擎数据存储中使用它们
另外,不要忘记,基于GET请求进行更改几乎总是一个坏主意,并且会导致XSRF漏洞和其他问题