小编Bri*_*unt的帖子

Google App Engine - 了解用户是否为管理员

GAE中,有没有办法找出用户是否是管理员?

虽然is_current_user_admin()揭示了当前用户是否是管理员,但我想知道是否有办法发现给定User对象是否是管理员(例如假设的User.is_admin()功能).

谢谢你的阅读.

布赖恩

google-app-engine

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

在Jinja 2中的包含文件顶部插入javascript

在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合并到标签中.


x.html

<html>
<head>
  <script type="text/javascript>
  {% block head_js %}{% endblock %}
  </script>
  </head>
<body>
  {% include "y.html" %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

y.html

{% 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)

python templates mako genshi jinja2

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

jQuery $ .get/$ .ajax传递HTTP状态代码200而不是预期状态代码201或202

我有一个服务器从同一个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

谢谢你的阅读.

ajax jquery http

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

适用于modelname_set的Google App Engine ndb(backreference属性)

Google App Engine的NDB中是否存在等效的modelname_set(反向引用属性)?

在旧DB中,Model实体将后引用属性描述为:

back-reference属性的名称默认为modelname_set(模型类的名称为小写字母,"_ set"添加到末尾),可以使用referenceProperty构造函数的collection_name参数进行调整.

我注意到NDB db.Model实例似乎不存在这个属性.

NDB是否具有与引用属性等效的内容?

google-app-engine app-engine-ndb

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

Amplify.js - 类似CRUD的网址

我正在使用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)

javascript amplifyjs

10
推荐指数
2
解决办法
2816
查看次数

使用不同类型的属性扩展 `Record&lt;string, string[]&gt;`

在 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,其中:

  1. 的类型和属性键idcountset被固定为stringnumberSet<number>
  2. 添加到对象的dynamicItemListanotherDynamicallyAddedList和任何其他属性的类型是string[]

我尝试了许多我认为可能有效的变体,包括:

type ExtensibleRecord = { …
Run Code Online (Sandbox Code Playgroud)

typescript

10
推荐指数
2
解决办法
4954
查看次数

在Django中,哪里是放置HTML格式数据的短片段的最佳位置?

这个问题与(但可能不完全相同)有关:

Django有HTML助手吗?

我的问题是:在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)

python django model-view-controller design-patterns

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

如何在Django中完成文本的完整历史记录?

我想拥有用户编辑的大文本字段的完整历史记录,使用Django存储.

我见过这些项目:

我有一个特殊的用例,可能超出了这些项目提供的范围.此外,我对这些项目的文档记录,测试和更新情况保持警惕.无论如何,这是我面临的问题:

我有一个模特,喜欢:

from django.db import models

class Document(models.Model):
   text_field = models.TextField()
Run Code Online (Sandbox Code Playgroud)

这个文本字段可能很大 - 超过40k - 我希望有一个自动保存功能,每30秒左右保存一次字段.这可能会使数据库变得非常大,显然,如果每次40k都有很多保存(如果压缩可能仍然是10k).我能想到的最佳解决方案是保持最新保存版本和新版本之间的差异.

但是,我担心涉及并行更新的竞争条件.有两种截然不同的竞争条件(第二种情况比第一种情况严重得多):

  1. HTTP事务竞争条件:用户A和用户B请求文档X0,并单独进行更改,生成Xa和Xb.Xa被保存,X0和Xa之间的差异是"Xa-0"("少了一点"),Xa现在被存储为数据库中的正式版本.如果Xb随后保存,则覆盖Xa,差异为Xb-a("b减去a").

    虽然不理想,但我并不过分担心这种行为.文档相互重写,用户A和B可能彼此不知道(每个文档都以文档X0开头),但历史保留了完整性.

  2. 数据库读取/更新竞争条件:有问题的竞争条件是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原子性:

非常感谢你.

django parallel-processing concurrency atomic django-models

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

在Python中使用参数调用对象的方法

我希望能够在具有动态函数名称的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和其他的内置功能列表.这是一个简单的参考问题,但唉,我来了!

谢谢阅读!

python reflection methods

9
推荐指数
2
解决办法
2万
查看次数

为(La)TeX重载Jinja2自动视图

是否有可能重载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} &lt;-- is escaped
     \end{document}
Run Code Online (Sandbox Code Playgroud)

这里的问题是使用HTML转义.所以{,}应该被转义,但它们不是,并且<被转换为&lt;但它不应该被转换.

我想重载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)

markup jinja2

9
推荐指数
0
解决办法
1047
查看次数