小编Yam*_*tas的帖子

可以将整个 POST 作为 JSON 对象发送吗?

我在 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 才能工作的客户端之外,我可能会错过这样做的一些缺点。这样做是否可以,或者在重新排列代码之前我应该​​考虑什么?

python post google-app-engine json

3
推荐指数
1
解决办法
221
查看次数

为什么keys_only查询没有返回强一致的结果?

根据我在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

1
推荐指数
1
解决办法
58
查看次数

为什么我不能在querySelectorAll的结果上使用map?

我最近需要从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得到的是一个数组,为什么我不能使用第一个表达式,就像我对任何其他数组一样?

javascript

1
推荐指数
2
解决办法
580
查看次数