小编Tra*_*son的帖子

JavaScript支持哪种好的模板语言?

模板在已有的编程语言中是一项相当健康的业务,但有哪些好的可以在JavaScript中处理?

"模板"是指接受数据对象作为输入的文档,将数据插入某种序列化标记语言,并输出标记.众所周知的例子是JSP,原始的PHP,XSLT.

"好",我的意思是HTML作者的声明和容易编写,它是健壮的,并且它也支持其他语言.比我所了解的选项更好.一些"不好"的例子:


字符串数学:

element.innerHTML = "<p>Name: " + data.name
    + "</p><p>Email: " + data.email + "</p>";
Run Code Online (Sandbox Code Playgroud)

显然太笨重,HTML结构不明显.


XSLT:

<p><xsl:text>Name: </xsl:text><xsl:value-of select="//data/name"></p>
<p><xsl:text>Email: </xsl:text><xsl:value-of select="//data/email"></p>
Run Code Online (Sandbox Code Playgroud)

//结构上这很好用,但是让我们面对它,XSLT会混淆HTML开发人员.


Trimpath:

<p>Name: ${data.name}</p><p>Email: ${data.email}</p>
Run Code Online (Sandbox Code Playgroud)

//这很好,但处理器仅在JavaScript中受支持,并且该语言有点原始(http://code.google.com/p/trimpath/wiki/JavaScriptTemplateSyntax).


我很想看到一个JSP或ASP或PHP的子集移植到浏览器,但我还没有找到.

现在人们在JavaScript中使用什么来模仿它们?

附录

几个月后,这里发布了大量可行的模板语言,但大多数语言都不能用于任何其他语言.大多数这些模板无法在JavaScript引擎之外使用.

例外是微软 - 您可以在浏览器或任何其他ASP引擎中处理相同的ASP.由于您已经绑定到Microsoft系统,因此它有自己的一组可移植性问题.我已经将其标记为答案,但我仍然对更便携的解决方案感兴趣.

感谢所有输入到目前为止!

javascript templates

18
推荐指数
4
解决办法
3257
查看次数

Jython需要哪些安全权限才能成功运行不受信任的Python代码?

简单来说

Jython在带有安全管理器的JVM中运行.安全管理器不应该阻止Jython引擎本身完成它的工作,但它不应该允许在Jython中运行的python脚本执行任何特权操作.完成此任务的最低Java安全策略是什么?

换句话说(长版)

这个问题是关于使用Java的安全机制来沙箱不受信任的python脚本.(我不想讨论沙盒python的其他方法.)如果这种安全方法存在根本性的错误,请说明.

不受信任的python代码将调用受信任的Java对象上的方法,并将作为PyObject嵌入Java中.这在Jythonbook的例子中有解释,我们将使用该示例中的代码.这是Java 1.6上的Jython 2.5.2.

我们需要向安全管理器提供一些非常具体的指令,因为Jython会执行自己的一些特权操作,但它也会执行不受信任的python代码,这些代码不应具有任何特权.

首先,为了安全起见,我们在Java VM中安装了一个SecurityManager:

/home/me% export CLASSPATH=.:jython.jar
/home/me% javac ./org/jython/book/interfaces/BuildingType.java ./org/jython/book/Main.java ./org/jython/book/util/BuildingFactory.java
/home/me% java org.jython.book.Main
Building Info: null BUILDING-A 100 WEST MAIN
Building Info: null BUILDING-B 110 WEST MAIN
Building Info: null BUILDING-C 120 WEST MAIN
Run Code Online (Sandbox Code Playgroud)

大.但对我们来说,Building.py是不受信任的代码,所以我们锁定了JVM.问题是,这使Jython陷入瘫痪:

/home/me% java -Djava.security.manager org.jython.book.Main
Jul 23, 2013 7:07:17 PM org.python.google.common.base.internal.Finalizer getInheritableThreadLocalsField
INFO: Couldn't access Thread.inheritableThreadLocals. Reference finalizer threads will inherit thread local values.
Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) …
Run Code Online (Sandbox Code Playgroud)

security jython

7
推荐指数
2
解决办法
1411
查看次数

如何在自定义PyYAML构造函数中处理递归?

PyYAML可以处理常规python对象中的循环图.例如:

片段#1.

class Node: pass
a = Node()
b = Node()
a.child = b
b.child = a
# We now have the cycle a->b->a
serialized_object  = yaml.dump(a)
object = yaml.load(serialized_object)
Run Code Online (Sandbox Code Playgroud)

此代码成功,因此显然有一些机制可以在加载序列化对象时阻止无限递归.当我编写自己的YAML构造函数时,如何利用它?

例如,假设Node是具有瞬态域的一类foobar,以及intransient场child.只child应将其纳入yaml文档.我希望这样做:

小片#2.

def representer(dumper, node):
  return dumper.represent_mapping("!node", {"child": node.child})

def constructor(loader, data):
  result = Node()
  mapping = loader.construct_mapping(data)
  result.child = mapping["child"]
  return result

yaml.add_representer(Node, representer)
yaml.add_constructor("!node", constructor)

# Retry object cycle a->b->a from earlier code snippet
serialized_object  = …
Run Code Online (Sandbox Code Playgroud)

constructor graph-traversal pyyaml

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