虽然is_current_user_admin()揭示了当前用户是否是管理员,但我想知道是否有办法发现给定User对象是否是管理员(例如假设的User.is_admin()功能).
谢谢你的阅读.
布赖恩
在Jinja2中,我希望通过运行以下内容来实现它的运行:
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('x.html')
print template.render()
Run Code Online (Sandbox Code Playgroud)
本质上,目标是<head>通过使用{% call js() %} /* some js */ {% endcall %}宏来将所有javascript合并到标签中.
<html>
<head>
<script type="text/javascript>
{% block head_js %}{% endblock %}
</script>
</head>
<body>
{% include "y.html" %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
{% macro js() -%}
// extend head_js
{%- block head_js -%}
{{ super() }}
try { {{ caller() }} } catch (e) {
my.log.error(e.name + ": " + e.message);
} …Run Code Online (Sandbox Code Playgroud) 我有一个服务器从同一个URL返回HTTP状态代码200,201和202.在Chrome中,我已经通过网络调试面板确认状态代码是我期望的(即200,201或202).我依靠该状态代码来确定下一步.
我希望jQuery(版本1.5.2)AJAX请求的回调设置jqxhr.status为服务器发送的状态代码.但是,即使服务器发送的代码为201或202,状态代码也始终为200.
换句话说,Code: 200无论服务器发送什么,都会打印以下代码.
$.get(url, {}, function (data, textStatus, xhr ) {
alert("Code: " + xhr.status);
});
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况,更重要的是,一个人如何可以得到实际的状态代码在一个jQuery AJAX回调$.get或$.ajax?
谢谢你的阅读.
Google App Engine的NDB中是否存在等效的modelname_set(反向引用属性)?
在旧DB中,Model实体将后引用属性描述为:
back-reference属性的名称默认为modelname_set(模型类的名称为小写字母,"_ set"添加到末尾),可以使用referenceProperty构造函数的collection_name参数进行调整.
我注意到NDB db.Model实例似乎不存在这个属性.
NDB是否具有与引用属性等效的内容?
我正在使用amplify.request,我希望在向服务器发送数据和从服务器发送数据时使用类似CRUD的URL.这是一个例子:
resources = {
"document_create" : ['/d/crud/', "POST"],
"document_read" : ['/d/crud/{id}', "GET"],
"document_update" : ['/d/crud/{id}', "PUT"],
"document_delete" : ['/d/crud/{id}', "DELETE"]
};
$.each(resources, function (resource, settings) {
definition = {
url : settings[0],
type : settings[1],
dataType: "json", // what comes back
decoder : 'jsend',
contentType: 'application/json' // what goes there
};
amplify.request.define(resource, "ajax", definition);
});
Run Code Online (Sandbox Code Playgroud)
function make_request(resource, params, success_cb, error_cb) {
if (this.is_post(resource)) {
// this.is_post is a test, defined elsewhere, to see if this is …Run Code Online (Sandbox Code Playgroud) 在 Typescript 中,以下内容似乎应该完成所需类型的创建:
interface RecordX extends Record<string, string[]> {
id: string
}
Run Code Online (Sandbox Code Playgroud)
但这抱怨:
“string”类型的属性“id”不可分配给字符串索引类型“string[]”。ts(2411)
如何将不同类型的属性添加到Record<>实用程序类型?
通常,如何描述具有异构值类型固定属性但动态添加同质值类型属性的对象。
S,例如给定这个对象:
const a = {
// some properties with known "hard-coded" types
id: '123',
count: 123,
set: new Set<number>(),
// and some dynamic properties
dynamicItemList: ['X', 'Y']
anotherDynamicallyAddedList: ['Y', 'Z']
} as ExtensibleRecord
Run Code Online (Sandbox Code Playgroud)
那么如何定义类型或接口ExtensibleRecord,其中:
id,count和set被固定为string,number和Set<number>dynamicItemList和anotherDynamicallyAddedList和任何其他属性的类型是string[]我尝试了许多我认为可能有效的变体,包括:
type ExtensibleRecord = { …Run Code Online (Sandbox Code Playgroud) 这个问题与(但可能不完全相同)有关:
我的问题是:在Django中,我不断重现低级数据库对象的基本格式.这是一个例子:
我有两个班,人和地址.每个人都有多个地址,设置为likeo(在各自的models.py中)
class Person(models.Model):
...
class Address(models.Model):
contact = models.ForeignKey(Person)
Run Code Online (Sandbox Code Playgroud)
现在,每当我看一个人,我想看到他们所有的地址.所以假设Persons/views.py有类似的东西:
def detail(request, person_id):
person = get_object_or_404( Person, pk=person_id )
return render_to_response('persons/details.html',
{ 'title' : unicode(person), 'addresses': person.address_set.all() } )
Run Code Online (Sandbox Code Playgroud)
并且,我有一个模板,persons/details.html,带有代码,例如,像 - 所以:
{% extends "base.html" %}
{% for address in addresses %}
<b>{{ address.name }}</b>
{{ address.type }} <br>
{{ address.street_1 }}<br>
{{ address.street_2 }}<br>
{{ address.city }} {{ address.stateprov }} {{ address.postalcode }}<br>
{{ address.country }}
<hr>
{{ endfor }} …Run Code Online (Sandbox Code Playgroud) 我想拥有用户编辑的大文本字段的完整历史记录,使用Django存储.
我见过这些项目:
我有一个特殊的用例,可能超出了这些项目提供的范围.此外,我对这些项目的文档记录,测试和更新情况保持警惕.无论如何,这是我面临的问题:
我有一个模特,喜欢:
from django.db import models
class Document(models.Model):
text_field = models.TextField()
Run Code Online (Sandbox Code Playgroud)
这个文本字段可能很大 - 超过40k - 我希望有一个自动保存功能,每30秒左右保存一次字段.这可能会使数据库变得非常大,显然,如果每次40k都有很多保存(如果压缩可能仍然是10k).我能想到的最佳解决方案是保持最新保存版本和新版本之间的差异.
但是,我担心涉及并行更新的竞争条件.有两种截然不同的竞争条件(第二种情况比第一种情况严重得多):
HTTP事务竞争条件:用户A和用户B请求文档X0,并单独进行更改,生成Xa和Xb.Xa被保存,X0和Xa之间的差异是"Xa-0"("少了一点"),Xa现在被存储为数据库中的正式版本.如果Xb随后保存,则覆盖Xa,差异为Xb-a("b减去a").
虽然不理想,但我并不过分担心这种行为.文档相互重写,用户A和B可能彼此不知道(每个文档都以文档X0开头),但历史保留了完整性.
数据库读取/更新竞争条件:有问题的竞争条件是Xa和Xb同时保存在X0上.会有(伪)代码类似于:
def save_history(orig_doc, new_doc):
text_field_diff = diff(orig_doc.text_field, new_doc.text_field)
save_diff(text_field_diff)
Run Code Online (Sandbox Code Playgroud)
如果Xa和Xb都从数据库中读取X0(即orig_doc是X0),它们的差异将变为Xa-0和Xb-0(与序列化的Xa-0相反,然后是Xb-a,或等效的Xb-0然后Xa b).当您尝试将差异拼接在一起以生成历史记录时,它将在修补程序Xa-0或Xb-0(均适用于X0)上失败.历史的完整性已经受到损害(或者有吗?).
一种可能的解决方案是自动协调算法,该算法可以事后检测这些问题.如果重建历史记录失败,可能会假设已发生竞争条件,因此将失败的修补程序应用于历史记录的先前版本,直到成功为止.
我很高兴能就如何解决这个问题得到一些反馈和建议.
顺便说一句,只要它是一个有用的出路,我注意到这里讨论了Django原子性:
非常感谢你.
我希望能够在具有动态函数名称的Python类上调用不同的方法,例如
class Obj(object):
def A(self, x):
print "A %s" % x
def B(self, x):
print "B %s" % x
o = Obj()
# normal route
o.A(1) # A 1
o.B(1) # B 1
# dynamically
foo(o, "A", 1) # A 1; equiv. to o.A(1)
foo(o, "B", 1) # B 1
Run Code Online (Sandbox Code Playgroud)
什么是"foo"?(或者是否有其他方法?)我确定它必须存在,但我似乎无法找到它或记住它的名称.我看了看getattr,apply和其他的内置功能列表.这是一个简单的参考问题,但唉,我来了!
谢谢阅读!
是否有可能重载Jinja2,autoescape以便以用户指定的方式(即除了HTML之外的其他东西,如LaTeX)逃脱?
这是一个试图逃避的例子TeX.
import jinja2
class MyEnv(jinja2.Environment):
def __init__(self, filters={}, globals={}, tests={},
loader=None, extensions=[], **kwargs):
super(MyEnv, self).__init__(
autoescape = True,
)
template = MyEnv().from_string("""\documentclass[{{ class }}]
\\begin{document}
{{ content }}
\end{document}
""")
print template.render({
'class':'memoir',
'content': '{bob} <-- is escaped',
})
Run Code Online (Sandbox Code Playgroud)
运行上面的内容时,它会输出:
\documentclass[memoir]
\begin{document}
{bob} <-- is escaped
\end{document}
Run Code Online (Sandbox Code Playgroud)
这里的问题是使用HTML转义.所以{,}应该被转义,但它们不是,并且<被转换为<但它不应该被转换.
我想重载Jinja2用来转义变量的转义函数.
我的第一个想法是超载finalize和禁用autoescape.例如
import jinja2
class MyEnv(jinja2.Environment):
def __init__(self, filters={}, globals={}, tests={},
loader=None, extensions=[], **kwargs):
super(MyEnv, …Run Code Online (Sandbox Code Playgroud) python ×3
django ×2
jinja2 ×2
ajax ×1
amplifyjs ×1
atomic ×1
concurrency ×1
genshi ×1
http ×1
javascript ×1
jquery ×1
mako ×1
markup ×1
methods ×1
reflection ×1
templates ×1
typescript ×1