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)
它看起来不容易理解吗?
在使用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更容易和可读.
提前致谢..
python google-app-engine app-engine-ndb google-cloud-datastore
我在页面中禁用了一些字段,例如:(使用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) 我有变量,其中包含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'.
我想在中间件中访问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对象.
我该怎么办?
谢谢你的帮助..
我有一个模板(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) 我想为应用程序引擎中托管的应用程序提供存储在谷歌云存储中的静态文件.在HTML文件中,我用过
<link href="https://storage.cloud.google.com/my_bucket/custom.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)
如果登录用户的Google帐户有权访问存储桶,则该工作正常.由于任何无法访问我的存储桶的人都可以访问应用,因此不会提供静态文件.
是否可以公开提供存储桶中的静态文件?我将静态文件(custom.css)设置为"公共共享"(ACL设置为"公共读取"),但其他用户仍然无法访问它.
我是卡桑德拉的新手。按照此链接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) 我正在阅读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时它工作正常.
鉴于有一天,我希望得到当天出现的那一周的所有日子(日期时间实例).
我有一个解决方案,如果存在错误,如果存在更有效的方法,请纠正我.
>>> 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) 我需要将三个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 /时,我期待发生同样的事情.
这里出了什么问题?谢谢你的帮助..
我有一个基于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
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) 我正在经历如何制作一系列功能装饰器? 了解装饰.
在下面的示例中,我们看到由于闭包,包装函数可以访问"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)