小编Bri*_*unt的帖子

是Python 2.7/3中必需的unicode(codecs.BOM_UTF8,"utf8")?

在代码审查中,我遇到了以下代码:

# Python bug that renders the unicode identifier (0xEF 0xBB 0xBF)
# as a character.
# If untreated, it can prevent the page from validating or rendering 
# properly. 
bom = unicode( codecs.BOM_UTF8, "utf8" )
r = r.replace(bom, '')
Run Code Online (Sandbox Code Playgroud)

这是一个将字符串传递给Response对象(Django或Flask)的函数.

这仍然是在Python 2.7或3中需要此修复的错误吗?有些东西告诉我它不是,但我想我会问,因为我不太清楚这个问题.

我不知道它来自哪里,但我在互联网上看过它,有时与Jinja2(我们正在使用)相关联.

谢谢阅读.

python unicode byte-order-mark utf-8

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

什么时候ndb Model的_post_put_hook的未来与self不同?

Google App Engine的ndb提供了一个_post_put_hook(self, future),记录如下:

在put()之后运行的钩子

为了更好地理解这个钩子,我想知道什么时候self会与future参数的结果不同.

型号钩文档提供:

如果使用带有异步API的后挂钩,则通过调用check_result(),get_result()或让(在tasklet内部)异步方法的未来来触发挂钩.Post hooks不检查RPC是否成功; 无论失败如何,钩子都会运行.

所有后挂钩在调用签名末尾都有一个Future参数.此Future对象包含操作的结果.您可以在此Future上调用get_result()来检索结果; 你可以确定get_result()不会阻塞,因为在调用钩子时Future已经完成了.

但是,当我put像这样异步调用时:

from google.appengine.ext import ndb

class MyModel(ndb.Model):
   xyz = ndb.StringProperty()

   def _post_put_hook(self, future):
      print "self.xyz: {}, future.xyz: {}".format(
             self.xyz, future.get_result().get().xyz))

m = MyModel()
f = m.put_async()
f.wait()

m.xyz = 'abc'
f = m.put_async()
f.wait()
Run Code Online (Sandbox Code Playgroud)

输出:

self.xyz: None, future.xyz: None
self.xyz: abc, future.xyz: abc
Run Code Online (Sandbox Code Playgroud)

在"put_async"的背景下,我认为人们可能会想到self是修改前的模型,并future成为模型现在保存.否则,不清楚上下文future中的目的是什么put.

当将selffuture在的背景下不同put …

google-app-engine app-engine-ndb

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

CSP安全的ES6模板文字

是否有模板引擎将以ES6模板文字(例如"string ${var}")的样式解析模板而不违反脚本评估的内容安全策略(CSP)限制?

对剧本评价CSP限制阻止eval,new Function,setTimeout(string)setInterval(string).

有许多模板引擎,可以提供或进行修改,以提供类似ES6风格模板文字,如John Resig的的MicroTemplates,lodash _.template和DoT.js.但是所有人似乎都违反了CSP new Function.

如果var可以是不受限制的Javascript,它在某些方面会很方便,但由于明显的原因,这可能是不可能的.但是我需要能够根据需要修改引擎以格式化输出.

在这种情况下,性能不是问题,并且预编译模板不是一种选择.其他人讨论了预编译.

作为附加限制,内容是文本 - 而不是HTML.我不认为面向DOM的模板引擎如Knockout或PURE不会有效地工作.

我的第一个想法是从mustache.js开始并从那里修改它(即改变mustache.tags = ['${', '}']DIY解决方案,但我会感谢任何有关该主题的想法,因为似乎缺乏关于CSP和模板的讨论.

javascript content-security-policy ecmascript-6 template-strings

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

Google App Engine搜索API

GAE Search API的Python版本中查询搜索索引时,首先返回的是搜索具有与标题匹配的文档的项目的最佳实践,然后返回与正文相匹配的文档?

例如给出:

body = """This is the body of the document, 
with a set of words"""

my_document = search.Document(
  fields=[
    search.TextField(name='title', value='A Set Of Words'),
    search.TextField(name='body', value=body),
   ])
Run Code Online (Sandbox Code Playgroud)

如果可能的话,如何Document使用此优先级返回的结果对上述表单的s 的索引执行搜索,其中要搜索的短语位于变量中qs:

  1. title匹配的文件qs; 然后
  2. 身体与qs单词匹配的文档.

似乎正确的解决方案是使用a MatchScorer,但我可能在此处不合适,因为我之前没有使用过此搜索功能.从文档中不清楚如何使用MatchScorer,但我假设一个子类并重载一些函数 - 但由于这没有记录,我没有深入研究代码,我不能肯定地说.

这里有什么我想念的,或者这是正确的策略?我是否想念记录这类事情的地方?


为了清楚起见,这是一个更详细的预期结果的例子:

documents = [
  dict(title="Alpha", body="A"),          # "Alpha"
  dict(title="Beta", body="B Two"),       # "Beta"
  dict(title="Alpha Two", body="A"),      # "Alpha2"
]

for doc in documents: 
  search.Document(
    fields=[
       search.TextField(name="title", …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine gae-search

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

Knockout绑定value.update没有使用自定义绑定和defineProperty调用

我有一个Knockout扩展,knockout-secure-binding,我们遇到了一个问题.

特别是在使用时Object.defineProperty,如knockout-es5所做的那样,当在一个触发更改事件时,不会调用value绑定的update函数input.

我的单元测试说明了它的特殊性.这有效:

it("reads an input `value` binding", function () {
    var input = document.createElement("input"),
        evt = new CustomEvent("change"),
        context = { vobs: ko.observable() };
    input.setAttribute("data-sbind", "value: vobs")
    ko.applyBindings(context, input)
    input.value = '273-9164'
    input.dispatchEvent(evt)
    assert.equal(context.vobs(), '273-9164')
})
Run Code Online (Sandbox Code Playgroud)

这(敲除-s5定义属性的方式)不起作用:

it("reads an input `value` binding for a defineProperty", function () {
    // see https://github.com/brianmhunt/knockout-secure-binding/issues/23
    var input = document.createElement("input"),
        evt = new CustomEvent("change"),
        obs = ko.observable(),
        context …
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-es5-plugin knockout-3.0

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

Typescript `for...of` 循环中的生成器

我试图让 Typescript 正确编译以下生成器循环,它在现代浏览器中按预期工作:

/** Should print "x= 1 y= 2" **/
function* gen() { yield [1, 2] }
for (const [x, y] of gen()) { console.log("x=", x, "y=", y) }
Run Code Online (Sandbox Code Playgroud)

但通过 Typescript 运行后失败了。将以上内容放入Typescript Playground中说明了失败,即for-of转换为数组迭代循环,但生成器返回一个对象。

Typescript 似乎已损坏,如果是这样,这是一个已知问题吗?我在https://github.com/Microsoft/TypeScript上没有看到它。

最好的解决方法是什么?在生成器函数上使用Array.from让我觉得最连贯?

typescript ecmascript-6

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

使用 WebCrypto 从 PBKDF2 生成 ECDH 密钥

\n

警告以下内容并非对将密码转换为 ECDH 密钥的认可。从高熵、加密安全的 PRNG 创建 ECDH 密钥。

\n
\n\n

我想获取一个秘密并从中生成 ECDH 公钥/私钥。

\n\n

在浏览器中,通常的方法是使用 PBKDF2(或其他确定性字节)在 WebCrypto 中生成 ECDH 公钥/私钥对。

\n\n

以下示例代码应该执行此操作,但它在 Chrome 中引发 DOM 异常:

\n\n
// Generate a random KDF key.\nconst priv = new Uint8Array(24)\ncrypto.getRandomValues(priv)\nconst kdfKey = await crypto.subtle.importKey(\n  \'raw\', priv, { name: \'PBKDF2\' }, false, [\'deriveKey\'])\n\n// Derive the ECDH key.\nconst salt = new Uint8Array(16)\nconst iterations = 2000\nconst hash = { name: \'SHA-512\' }\nconst curve = { name: \'ECDH\', namedCurve: \'P-384\' }\nconst usages = [\'deriveKey\']\n\ncrypto.getRandomValues(salt)\n\nconst ecdhKey = …
Run Code Online (Sandbox Code Playgroud)

javascript cryptography diffie-hellman

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

如何将常规引号(即',')转换为LaTeX/TeX引号(即`',``'')

鉴于用正常引号编写的文档,例如

Ben said "buttons, dear sir".
I replied "Did you say 'buttons'?" to him.
Run Code Online (Sandbox Code Playgroud)

有什么方法可以用适当的语义将这些东西变成LaTeX引号.即

Ben said ``buttons, dear sir''.
I replied ``Did you say `buttons'?'' to him.
Run Code Online (Sandbox Code Playgroud)

所以LaTeX产生:

Ben said “buttons, dear sir”.
I replied “Did you say ‘buttons’?”
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是转向正则表达式.但是,我没有从谷歌或正则表达式库获得任何点击"LaTeX引用正则表达式",当然"TeX引用正则表达式"似乎返回太多.

谢谢.

regex quotes latex

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

更改VIM gui标签宽度

在GVim中可以更改GUI选项卡的宽度(即顶部显示的选项卡标签guitablabel)?

特别是,标签标签对于guitablabel=%f该长度的任何东西都不宽.

谢谢

vim tabs

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

验证HTTP请求的来源

我有两个系统需要交谈。系统设置如下:

System A,在Google App Engine(GAE)上运行Django(Python 2.5)

System B,通过Lighttpd在Ubuntu / Linux上运行Django(Python 2.6)(可能稍后是nginx)

系统A将使用Url Fetch定期向系统B发出请求(“请求”)。

系统B具有Django应用程序设置,可通过侦听这些请求,urls.py例如:

urlpatterns = patterns('producer.views',
    url(r'^requisition$', 'requisition', name='requisition'),
)
Run Code Online (Sandbox Code Playgroud)

和一个views.py类似的东西:

import json
from django.http import HttpResponse

def requisition(request):
    " do something "
    response = HttpResponse()
    response['Content-type'] = 'application/json'
    response.write(json.dumps(...))
    return response
Run Code Online (Sandbox Code Playgroud)

如果系统B仅对系统A的请求做出响应,那么这将是对系统安全性的宝贵补充。

我想知道系统B提供哪些选项来验证请求是否来自系统A。我考虑了以下问题:

  • 检查IP地址是否来自GAE(但是我不知道GAE IP地址,它们可能会更改,并且可能是被欺骗的)
  • 检查IP的反向DNS来自GAE(但是我不知道GAE的DNS条目是什么,如果它们会更改,并且可能是被欺骗的)
  • 使用系统A的TLS客户端证书-但我不知道如何使用GAE
  • 根据与pycrypto共享的内容(例如盐)进行质询/响应

理想情况下,我想以一个views.py类似这样的结尾:

... 
from django.http import HttpResponseForbidden 

def requisition(request):
   " do something "
  if not verify_request_origin():
     return HttpResponseForbidden("Denied.")

  response …
Run Code Online (Sandbox Code Playgroud)

python encryption django google-app-engine cryptography

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