在代码审查中,我遇到了以下代码:
# 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(我们正在使用)相关联.
谢谢阅读.
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.
当将self与future在的背景下不同put …
是否有模板引擎将以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
在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:
title匹配的文件qs; 然后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) 我有一个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) 我试图让 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让我觉得最连贯?
\n\n\n警告以下内容并非对将密码转换为 ECDH 密钥的认可。从高熵、加密安全的 PRNG 创建 ECDH 密钥。
\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) 鉴于用正常引号编写的文档,例如
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引用正则表达式"似乎返回太多.
谢谢.
在GVim中可以更改GUI选项卡的宽度(即顶部显示的选项卡标签guitablabel)?
特别是,标签标签对于guitablabel=%f该长度的任何东西都不宽.
谢谢
我有两个系统需要交谈。系统设置如下:
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。我考虑了以下问题:
理想情况下,我想以一个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 ×3
cryptography ×2
ecmascript-6 ×2
javascript ×2
django ×1
encryption ×1
gae-search ×1
knockout-3.0 ×1
knockout.js ×1
latex ×1
quotes ×1
regex ×1
tabs ×1
typescript ×1
unicode ×1
utf-8 ×1
vim ×1