我在 python 中使用 GAE,并且使用了多种形式。通常,我的代码如下所示:
class Handler(BaseHandler):
#...
def post(self):
name = self.request.get("name")
last_name = self.request.get("last_name")
# More variables...
n = self.request.get("n")
#Do something with the variables, validations, etc.
#Add them to a dictionary
data = dict(name=name, last_name=last_name, n=n)
info = testdb.Test(**data)
info.put()
Run Code Online (Sandbox Code Playgroud)
我最近注意到当表单(变量)中有很多输入时它会变得太长,所以我想也许我可以发送一个字符串化的 JSON 对象(它可以被视为使用 json.loads 的 python 字典)。现在它看起来像这样:
class Handler(BaseHandler):
#...
def post(self):
data = validate_dict(json.loads(self.request.body))
#Use a variable like this: data['last_name']
test = testdb.Test(**data)
test.put()
Run Code Online (Sandbox Code Playgroud)
这要短得多。我倾向于以这种方式做事(并停止使用 self.request.get("something")),但我担心除了需要 javascript 才能工作的客户端之外,我可能会错过这样做的一些缺点。这样做是否可以,或者在重新排列代码之前我应该考虑什么?
根据我在Google Docs和其他SO问题中所阅读的内容,keys_only查询应该返回非常一致的结果(例如,此处和此处).
我的代码看起来像这样:
class ClientsPage(SomeHandler):
def get(self):
query = Client.query()
clients = query.fetch(keys_only=True)
self.write(len(clients))
Run Code Online (Sandbox Code Playgroud)
即使我使用keys_only = True参数获取结果,我在创建新的Client对象(这是一个根实体)后立即得到过时的结果.如果在插入之前有2个客户端对象,则在插入和重定向后它会一直显示2.我必须手动刷新页面才能看到数字更改为3.
我知道我可以使用祖先查询,但我先测试一些东西,我很惊讶地看到一个keys_only查询返回过时的结果.任何人都可以向我解释发生了什么事吗?
编辑1:这发生在开发服务器上,我还没有在生产中测试过.
python google-app-engine app-engine-ndb google-cloud-datastore
我最近需要从HTML文档中提取几个节点的值.我使用querySelectorAll获取节点,querySelectorAll返回符合条件的节点列表.之前我曾经使用过arr.map,所以我尝试这样做(这不起作用):
var elems = document.querySelectorAll('select option:checked');
values = elems.map(function(obj) {return obj.value});
Run Code Online (Sandbox Code Playgroud)
当我在MDN中阅读文档时,我发现我必须使用类似的东西:
var elems = document.querySelectorAll('select option:checked');
var values = Array.prototype.map.call(elems, function(obj) {
return obj.value;
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我从querySelectorAll得到的是一个数组,为什么我不能使用第一个表达式,就像我对任何其他数组一样?