我想渲染一个包含一系列文件的表单,代表产品的不同图像.提供文件应该是兼容性的,因此即使没有文件,表单也应该验证.我怎样才能做到这一点 ?
这是我使用的漏勺模式:
import colander
import deform
from deform import Form
from deform import ValidationFailure
from deform.interfaces import FileUploadTempStore
tmpstore = FileUploadTempStore()
class Image(colander.Schema):
image = colander.SchemaNode(
deform.FileData(),
widget=deform.widget.FileUploadWidget(tmpstore)
)
class Images(colander.SequenceSchema):
images = Image()
class ProductSchema(colander.Schema):
completename = colander.SchemaNode(colander.String(), title="Complete Name")
description = colander.SchemaNode(colander.String(),
widget = deform.widget.TextAreaWidget())
images = Images()
schema = ProductSchema()
form = Form(schema, buttons=("submit", ))
Run Code Online (Sandbox Code Playgroud)
我试图添加一个'缺失'的参数,如:
image = colander.SchemaNode(
deform.FileData(),
missing = ???
widget=deform.widget.FileUploadWidget(tmpstore)
)
Run Code Online (Sandbox Code Playgroud)
我觉得我什么时候有功能
missing={'filename': None, 'uid':None}
Run Code Online (Sandbox Code Playgroud)
但我真的不确定这是正确的做法......
谢谢 !
我有一个Python模块,我正在使用Sphinx编写教程,包括doctests.
这个模块附带了一些帮助程序.
我想在文档中包含这些帮助程序,并让doctest检查标准输出是否在当前程序版本和文档之间同步.
我想我可以使用sh模块或popen来检查给定程序的标准输出,但我更喜欢那些技巧不会显示在文档中,否则非程序员用户肯定会丢失.
有没有办法实现这一目标?
python doctest subprocess command-line-interface python-sphinx
<backgound>
我真的需要优化C++代码.我正在为分子模拟编写一个库,我需要添加一个新功能.我过去曾尝试添加此功能,但之后我使用了嵌套循环中调用的虚函数.我对此感到不满,第一次实施证明这是一个坏主意.然而,这对于测试概念是可以的.
</ background>
现在我需要这个功能尽可能快(没有汇编代码或GPU计算,这仍然必须是C++,更可读而不是更少).现在我对模板和类策略有了更多了解(来自Alexandrescu的优秀书籍),我认为编译时代码生成可能是解决方案.
但是,在完成将其实现到库中的巨大工作之前,我需要测试设计.问题是测试这个新功能的效率的最佳方法.
显然我需要改进优化,因为没有这个g ++(以及可能还有其他编译器)会在目标代码中保留一些不必要的操作.我还需要大量使用基准测试中的新功能,因为1e-3秒的增量可以区分好的和坏的设计(在真实程序中这个功能将被称为百万倍).
问题是g ++在优化时有时"太聪明",如果考虑到从未使用计算结果,可以删除整个循环.我在查看输出汇编代码时已经看过了.
如果我向stdout添加一些打印,那么编译器将被强制在循环中进行计算,但我可能主要是对iostream实现进行基准测试.
那么如何对从库中提取的小特征进行正确的基准测试呢?相关问题:在小型装置上进行这种体外试验是正确的方法还是我需要整个背景?
谢谢你的建议!
似乎有几种策略,从特定于编译器的选项,允许微调到更通用的解决方案,应该适用于每个编译器,如volatile或extern.
我想我会尝试所有这些.非常感谢您的所有答案!
MongoDB对我来说是一个很棒的数据库.但是,有些情况下我确实需要原子多文档事务.例如,在账户之间转移资金(如金钱或信誉),这需要完全成功或完全失败.
我想知道是否可以通过实现MultiVersion并发控制模式的库与MongoDB进行交互.
表演有多糟糕?使用混合方法是否可行且有利可图,仅在必要时使用"mongo-mvcc"库,而在仅处理单个文档时使用传统的数据库连接还是会破坏mvcc的内容?
假设我有一条'/ foo/bar/baz'路线.我还希望有另一个对应于'/ foo'或'/ foo /'的视图.但是我不想系统地为其他路径添加尾部斜杠,仅用于/ foo和其他几个(/ buz但不是/ biz)
从我看到的我不能简单地定义具有相同route_name的两个路由.我目前这样做:
config.add_route('foo', '/foo')
config.add_route('foo_slash', '/foo/')
config.add_view(lambda _,__: HTTPFound('/foo'), route_name='foo_slash')
Run Code Online (Sandbox Code Playgroud)
金字塔中有更优雅的东西吗?
在这个帖子中,有人指出我使用sqlalchemy-migrate来帮助使用sqlalchemy快速变化的Web应用程序.但是,还建议使用" 自己动手"方法,包括手动为新数据库模式编写CSV列,最后导入它们.
问题是我无法找到sqlalchemy-migrate的真实示例.我发现的资源最多只需要添加一个列或一列重命名.官方文档基本上描述了API,很难看到如何有效地使用迁移.从文档中我甚至不知道迁移是否有助于更改数据库引擎,例如从sqlite到mysql,而DIY解决方案可以完成工作.
我真的希望看到代码可以对数据库模式进行一些非平凡的转换,并证明迁移确实是一个有用的工具.
我在哪里可以找到sqlalchemy-migrate的好例子/教程?
谢谢 !
我需要以下内容来引发异常:
jinja2.Template("Hello {{ a.x }}").render(a={})
Run Code Online (Sandbox Code Playgroud)
Jinja2以静默方式返回一个空字符串a.x,因此呈现为"Hello".
如何让jinja2在未定义的属性上引发异常?
我有一个金字塔应用程序,request.environ['REMOTE_ADDR']在某些地方使用.
该应用程序由端口6543上的Python Paste提供,而端口80上的nginx服务器将请求转发到Paste服务器.
nginx配置的灵感来自Pyramid食谱:
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:6543;
}
Run Code Online (Sandbox Code Playgroud)
在Pyramid应用程序中,变量request.environ ['REMOTE_ADDR']现在始终等于127.0.0.1.我看到了一些解决这个问题的策略,但我不知道是否有推荐的方法来解决这个问题.
这是我正在考虑的事情:
添加一个NewRequest订户,如有必要,它将替换request.environ ['REMOTE_ADDR']:
if 'HTTP_X_REAL_IP' in event.request.environ:
event.request.environ['REMOTE_ADDR'] = event.request.environ['HTTP_X_REAL_IP']
在点击金字塔图层之前使用wsgi中间件修改request.environ.
别的
您使用哪种策略来部署Pyramid应用程序?如果我有两个nginx代理会怎么样?(第一个服务于LAN,第二个服务器直接连接到互联网).
我需要访问我自己的谷歌日历。oauth2 的东西更有可能被设计为允许访问其他人的日历。有没有办法获得我自己的日历的永久凭据?
编辑:
为了澄清一下,我正在编写一个需要以自定义方式显示日历事件的网站,而仅通过包含 iframe 是不可能的。Web 后端采用 Python 编写,我需要该后端从我的日历中获取事件列表,进行一些过滤并显示这些事件。事件列表必须自动与日历同步(但我计划使用缓存来减少对 google API 的请求数量)。
我设法获得了 oath2 令牌,但它有一个到期日期(“expires_in”:3600)。令牌有一个刷新选项,但允许的刷新次数似乎有限制(请参阅https://developers.google.com/accounts/docs/OAuth2第 4 点。刷新令牌)。由于oauth2的目的主要是允许访问其他用户的日历,我想知道是否有另一种身份验证方案允许永久api访问我自己的日历。
让一个Foo类包含一些const和非const方法
struct Foo
{
Foo ();
~Foo();
void noSideEffect() const;
void withSideEffect();
};
Run Code Online (Sandbox Code Playgroud)
我也有一个Bar类,需要以Foo某种方式引用.更确切地说,对于这个问题可能过于精确,Bar实现了运算符||以及&&联合和交集,因此两个Bar实例需要知道它们是在同一个实例上运行的Foo.
我找到的最简单的解决方案是使用指向Foo对象的指针:
struct Bar
{
Foo * p_foo;
Bar (Foo& foo)
: p_foo(&foo) {};
}
Run Code Online (Sandbox Code Playgroud)
现在两个bar实例可以一起播放,看看它们是否都处理相同的Foo.我快乐了.
但是现在我想有时使用Bar和const Foo实例.嗯,这可能很容易,我只需创建一个const Bar实例,对吧?我们去:
const Bar createBarFromConstFoo(const Foo& foo)
{
Foo* newfoo = const_cast<Foo*>(&foo);
const Bar newbar (*newfoo);
return newbar;
}
Run Code Online (Sandbox Code Playgroud)
现在噩梦开始了(请参阅为什么C++不对指针数据强制执行const?).我想我理解为什么(标准是这样说的),我的主要问题是如何最好地应对它.
除了这个小标准的东西,createBarFomConstFoo几乎完成了我想要的东西,因为它返回了一个const Bar …
python ×6
pyramid ×3
c++ ×2
api ×1
benchmarking ×1
colander ×1
const ×1
credentials ×1
deform ×1
deployment ×1
doctest ×1
jinja2 ×1
mongodb ×1
mvcc ×1
nginx ×1
nosql ×1
oop ×1
optimization ×1
pointers ×1
pylons ×1
sqlalchemy ×1
subprocess ×1
transactions ×1
url-routing ×1
wsgi ×1