Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以通过对象';你的字典是什么?_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

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漏洞和其他问题