小编raj*_*jpy的帖子

App Engine中的db.ReferenceProperty()与ndb.KeyProperty

ReferenceProperty在处理两个模块之间的引用时非常有用.Fox例子:

class UserProf(db.Model):
    name = db.StringProperty(required=True)

class Team(db.Model):
    manager_name = db.ReferenceProperty(UserProf, collection_name='teams')
    name = db.StringProperty(required=True)
Run Code Online (Sandbox Code Playgroud)
  • 要使用团队实例获取"manager_name",我们使用team_ins.manager_name.
  • 为了获得由特定用户实例管理的"团队",我们使用user_instance.teams并迭代.

它看起来不容易理解吗?

在使用NDB做同样的事情时,我们必须修改

db.ReferenceProperty(UserProf, collection_name='teams') - > ndb.KeyProperty(kind=UserProf)

  • team_ins.manager_name.get() 会给你经理的名字
  • 为了让特定用户的所有团队成为管理者,我们必须这样做

    for team in Team.query(Team.manager_name == user_ins.key): 
        print "team  name:", team.name
    
    Run Code Online (Sandbox Code Playgroud)

正如您所看到的,处理这些场景在db中看起来比ndb更容易和可读.

  • 在ndb中删除ReferenceProperty的原因是什么?
  • 甚至db的查询user_instance.teams也会像在ndb的for循环中那样做.但在ndb中,我们明确提到使用for循环.
  • 当我们执行user_instance.teams时,幕后发生了什么?

提前致谢..

python google-app-engine app-engine-ndb google-cloud-datastore

15
推荐指数
2
解决办法
4745
查看次数

禁用字段被认为是在WTForms和Flask中进行验证

我在页面中禁用了一些字段,例如:(使用jinja2模板系统)

<html>
<body>
<form action="" method=POST>
    {{ form.name(disabled=True) }}
    {{ form.title }}
    -- submit button --
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

字段按预期在表单中禁用.

在我的views.py中:在表单提交上执行validate_on_submit()时,它在"name"字段上的验证错误失败,该字段被禁用.我希望验证忽略禁用字段.这是正确的行为吗?如果是的话,请你知道如何处理这种情况吗?

更新:

class TeamForm(wtf.Form):
    name = wtf.TextField("Team Name", validators=[validators.Required()])
    title = wtf.TextField("Title", validators=[validators.Required()])
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms

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

如何将datetime.time从UTC转换为不同的时区?

我有变量,其中包含UTC时间类型为datetime.time的时间,我希望它转换为其他时区.

我们可以在datetime.datetime实例中转换时区,如此SO链接所示 - 如何在Python中将本地时间转换为UTC?.我无法弄清楚如何在datetime.time实例中转换时区.我不能使用astimezone,因为datetime.time没有这个方法.

例如:

>>> t = d.datetime.now().time()
>>> t
datetime.time(12, 56, 44, 398402)
>>> 
Run Code Online (Sandbox Code Playgroud)

我需要UTC格式的't'.

python timezone datetime

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

如何在Flask MIddleware中访问请求

我想在中间件中访问request.url.

Flask app - test.py

from flask import Flask
from middleware import TestMiddleware
app = Flask(__name__)

app.wsgi_app = TestMiddleware(app.wsgi_app)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

middleware.py:

from flask import request

class TestMiddleware(object):

    def __init__(self, app):
        self.app = app 

    def __call__(self, environ, start_response):
        # How do I access request object here.
        print "I'm in middleware"
        return self.app(environ, start_response)
Run Code Online (Sandbox Code Playgroud)

我理解可以在Flask应用程序上下文中访问请求.我们通常使用

with app.test_request_context()
Run Code Online (Sandbox Code Playgroud)

但在中间件中,我无法访问Flask app对象.

我该怎么办?

谢谢你的帮助..

python wsgi flask

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

评论在jinja2中不起作用

我有一个模板(test.html)如下:

{% extends 'base.html' %}
{% from "_formhelpers.html" import render_field %}

{% block content %}

<div class="container">
    <div class="row">
        <div class="span6 offset3">
            <form class="form-horizontal" action="/create_user/" method="post">
                {{ form.csrf_token }}
                <dl>
                    {{ render_field(form.name) }}
                    {{ render_field(form.members) }}
                    <!--<div class="control-group">
                        <label class="control-label">
                            {{ form.task.label }}
                        </label>
                        <div class='controls'>
                            {{ form.task}}

                            {% if form.task.errors %}
                            <ul class="text-error">
                                {% for error in form.task.errors %}
                                    <li>{{ error }}</li>
                                {% endfor %}
                            </ul>
                            {% endif %}
                        </div>
                    </div>-->
                </dl>

            </form>
        </div>
    </div>
</div>

{% endblock %} …
Run Code Online (Sandbox Code Playgroud)

python jinja2

8
推荐指数
1
解决办法
4574
查看次数

从谷歌云存储服务静态文件?

我想为应用程序引擎中托管的应用程序提供存储在谷歌云存储中的静态文件.在HTML文件中,我用过

<link href="https://storage.cloud.google.com/my_bucket/custom.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)

如果登录用户的Google帐户有权访问存储桶,则该工作正常.由于任何无法访问我的存储桶的人都可以访问应用,因此不会提供静态文件.

是否可以公开提供存储桶中的静态文件?我将静态文件(custom.css)设置为"公共共享"(ACL设置为"公共读取"),但其他用户仍然无法访问它.

google-app-engine google-cloud-storage

7
推荐指数
1
解决办法
4241
查看次数

Cassandra 错误“无法创建 Java 虚拟机”

我是卡桑德拉的新手。按照此链接http://www.datastax.com/documentation/cassandra/2.0/webhelp/index.html#cassandra/install/installDeb_t.html在 1GB RAM 的 Ubuntu 虚拟盒中安装 Cassandra。

输出cassandra -f

xss =  -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms501M -Xmx501M -Xmn100M -XX:+HeapDumpOnOutOfMemoryError -Xss256k
Unrecognized VM option 'UseCondCardMark'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

这里,它显示out of memory错误,这将是未创建 JVM 的原因。您能帮忙解决这个问题吗?

谢谢你的帮助。

cassandra-env.sh 文件:

# Per-thread stack size.
JVM_OPTS="$JVM_OPTS -Xss1500k"

echo "xss = $JVM_OPTS"
Run Code Online (Sandbox Code Playgroud)

cassandra

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

"属性"应用于实例变量"self.x"时"超出最大递归深度"

我正在阅读property(),我理解属性访问是通过property()中指定的方法完成的.但是,当执行以下代码时,我得到"RuntimeError:超出最大递归深度".

class Property(object):

    def __init__(self):
        self.x = "Raj"

    def gettx(self):
        print "getting x"
        return self.x

    def settx(self, val):
        print "Setting x"
        self.x = val

    def dellx(self):
        print "deleting"
        return self.x

    x = property(gettx, settx, dellx, "I'm object property")


p = Property()
print "p.x", p.x
p.x = "R"
print "p.x:", p.x
Run Code Online (Sandbox Code Playgroud)

是否不可能以这种方式申请财产.因为当'self.x'改为self._x和self .__ x时它工作正常.

python

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

如何在一天内获得当前周的所有日期时间实例?

鉴于有一天,我希望得到当天出现的那一周的所有日子(日期时间实例).

我有一个解决方案,如果存在错误,如果存在更有效的方法,请纠正我.

>>> import datetime
>>> today = datetime.datetime(2013, 06, 26)
>>> today
datetime.datetime(2013, 6, 26, 0, 0)
>>> day_of_week = today.isocalendar()[2] - 1
>>> day_of_week
2
>>> start_date = today - timedelta(days=day_of_week)
>>> start_date
datetime.datetime(2013, 6, 24, 0, 0) # Got monday
>>> dates = [start + timedelta(days=i) for i in range(7)]
>>> dates
[datetime.datetime(2013, 6, 24, 0, 0),
 datetime.datetime(2013, 6, 25, 0, 0),
 datetime.datetime(2013, 6, 26, 0, 0),
 datetime.datetime(2013, 6, 27, 0, 0),
 datetime.datetime(2013, 6, 28, 0, 0), …
Run Code Online (Sandbox Code Playgroud)

python datetime date python-datetime

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

将三个URL路由到单个端点?使用Flask和Jinja2

我需要将三个URL映射到单视图功能.

@app.route('/items/', defaults={"item_name": "all", "status": "available"}, methods=['GET', 'POST'])
@app.route('/items/<item_name>/')
@app.route('/items/<item_name>/<status>')
def items_list(item_name, status):
    --- code goes here ----
Run Code Online (Sandbox Code Playgroud)

第一个和最后一个URL有效.即,/ items/ - item_name和status将具有默认值.和/ items/some_item_name/unavailable/ - 它使用传递的值.

当我尝试/ items/some_item_name/ - 它失败并出现此错误"TypeError:item_list()只需要2个参数(给定1个)",我理解为函数需要两个参数.这不是正确的做法吗?为什么'status'没有采用默认值'available'.因为当我们发出/ items /时,'item_name'和'status'采用默认值.当使用/ items/some_item_name /时,我期待发生同样的事情.

这里出了什么问题?谢谢你的帮助..

python flask

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

使用Appengine的NDB从实体的id获取密钥

我有一个基于ndb的模型,在保存它的同时,我使用当前登录用户的用户ID存储了'id'字段.(为什么我这样做?实际上这个模型过去基于db.Model而key_name有这个用户的id.现在,我将它转换为ndb)

m= Modelclass(id = str(users.get_current_user().used_id()),
      --- Other fields ---
m.put()
Run Code Online (Sandbox Code Playgroud)

这个模型的编辑表单发送了这个'id',我希望从中得到相应的'key'.但是,我得到"密钥ID号太长;收到'一些big_number'".试过两种方式

Modelclass.get_by_id(<id>).key 
Run Code Online (Sandbox Code Playgroud)

要么

ndb.Key('Modelclass', <id>)
Run Code Online (Sandbox Code Playgroud)

这是一种情况,可能存在用户可以在"id"字段中存储一些大数字的其他情况.在这些情况下,我们无法从"id"中提取密钥.那么,如何解决这样的问题.

我是ndb的新手.谢谢你的帮助.

python google-app-engine app-engine-ndb google-cloud-datastore

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

Python:将函数和参数一起分配给变量

def test(name):
    print "name:", name

func = test
func("testing") # it works, as I know that the function test accepts one parameter.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果"test"具有不同数量的参数,具体取决于场景以及"func"如何知道要传递多少个参数以及这些参数名称是什么.

对不起,如果我不清楚的话.这样可以更清晰地了解情景.

我有一个函数调度程序.

testcase_obj  = testcase() # A object of a class    
if command.startswith("test1"):    
    output = exec_test1()    
elif command.startswith("do_test"):    
    output = exec_do_test(testcase_obj)
Run Code Online (Sandbox Code Playgroud)

现在,我想在用户执行脚本时发送选项时包装一个函数.我将以上代码更改为:

testcase_obj  = testcase() # A object of a class    
if command.startswith("test1"):    
    func = exec_test1() # Mistake, this should be func = exec_test1
elif command.startswith("do_test"):    
    func = exec_do_test(testcase_obj) # I don't know how assign exec_do_test along …
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
2206
查看次数

装饰和封闭

我正在经历如何制作一系列功能装饰器? 了解装饰.

在下面的示例中,我们看到由于闭包,包装函数可以访问"method_to_decorate".但是,我不明白参数如何self以及lie包装函数是否可访问.

def method_friendly_decorator(method_to_decorate):
     def wrapper(self, lie):
         lie = lie - 3 # very friendly, decrease age even more :-)
         return method_to_decorate(self, lie)
     return wrapper

class Lucy(object):

    def __init__(self):
        self.age = 32

    @method_friendly_decorator
    def sayYourAge(self, lie):
        print "I am %s, what did you think?" % (self.age + lie)

l = Lucy()
l.sayYourAge(-3)
#outputs: I am 26, what did you think?
Run Code Online (Sandbox Code Playgroud)

python closures decorator python-decorators

0
推荐指数
1
解决办法
301
查看次数