我必须在我的页面上的iframe中包含一个外部whitelabel网站.外部网站上有许多页面,它们的高度差异很大.
我需要调整我的iframe的高度来适应这个.
我可以将第一页的高度加载到iframe中(使用PHP),但无法获得后续页面高度,因为无法知道iframe中url/location的变化.
由于这是iframe中的外部URL,因此通常的安全限制适用,因此所有解决方案必须来自父框架.解决方案必须至少可以在FF和IE上使用.
我能想到的唯一想法是测试滚动条是否在iframe上可见,但在这些情况下这似乎是不可能的.
如果有人可以证明我错了,或者有任何其他javascript/ajax/php跨浏览器解决方案,我很乐意听到它.
这个简单的应用程序有两个teardown_request
处理程序,我希望无论视图实现中发生什么,根据文档,每个请求都会调用它们.
import flask
import werkzeug.exceptions
app = flask.Flask(__name__)
@app.teardown_request
def teardown1(response):
print "Teardown 1"
return response
@app.teardown_request
def teardown2(response):
print "Teardown 2"
return response
@app.route("/")
def index():
return "chunky bacon"
@app.route("/httpexception")
def httpexception():
raise werkzeug.exceptions.BadRequest("no bacon?")
@app.route("/exception")
def exception():
raise Exception("bacoff")
if __name__ == "__main__":
app.run(port=5000)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它并依次向三个视图发出请求时,我得到以下输出:
Teardown 2 Teardown 1 127.0.0.1 - - [15/Nov/2011 18:53:16] "GET / HTTP/1.1" 200 - Teardown 2 Teardown 1 127.0.0.1 - - [15/Nov/2011 18:53:27] "GET /httpexception HTTP/1.1" 400 - Teardown …
我想向用户显示一些文字.我发送的字符串变量有多个换行符,我不想\n
显示.所以我做了:
footext = """f
o
o"""
#footext == "f\no\no"
@app.route("/someurl")
def foo():
return render_template("bar.html", text = footext.replace("\n", "<br />"))
Run Code Online (Sandbox Code Playgroud)
bar.html:
<html>
{{ text }}
</html>
Run Code Online (Sandbox Code Playgroud)
但是启用了自动视图,我看到的是f<br />o<br />o
.我的方法也不安全,我希望除了<br />
从文本中转义之外的每个标签.我看了一下flask.Markup模块,然而它们也没有真正起作用.
这样做的正确方法是什么?
使用virtualenv(或virtualenvwrapper)时,建议的做法是将所有虚拟环境组合在一起...例如〜/ .virtualenvs
但是,我在阅读大量关于部署Django应用程序的文章时已经注意到,建议似乎是将您的虚拟环境放在单个Web应用程序的根目录下...例如在/ srv/www/example中. COM/VENV.
我的问题是:
为什么?
如果我走这条路或者另一条路是否重要?
并且推荐的方式是另一种方式吗?
我在我的Ubuntu 10.04服务器上安装了virtualenv.
现在,当我做pip冻结它显示以下包:
Django==1.2.4
distribute==0.6.10
python-apt==0.7.94.2ubuntu6.2
virtualenv==1.5.1
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)
当我做"pip卸载Django"时,它说:
pip uninstall Django
Uninstalling Django:
Proceed (y/n)? y
Successfully uninstalled Django
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该卸载Django但它没有.当我做"pip freeze"时,我仍然能看到相同的包裹.
现在忍受我,另一个奇怪的事情是当我创建一个virtualenv然后在其中进行"pip冻结"时,我只看到一个包,那就是"wsgiref"这很奇怪,因为理想情况下它应该是空白的.
此外,尽管使用--no-site-packages创建了这个virtualenv,我仍然可以使用"django-admin.py startproject"创建一个新的django项目.
当我在这个virtualenv中启动python解释器并执行"import django"时,它会给出错误"No module named django".
此外,当我尝试在virtualenv中安装"pip install Django"时,它要求sudo权限,理想情况下不应该发生.
我该如何解决这个烂摊子.任何方式只重置所有pep和virtualenv?
我有一个遗留数据库,其中包含使用Perl中模块的nfreeze
方法编写的简单数据结构(没有CODE引用感谢)Storable
.
现在我需要将这些数据加载到Python应用程序中.有谁知道Storable
's 的Python实现thaw
?谷歌没有帮助我.
如果涉及到它,我可以从可存储源中反向设计数据格式,但如果已经完成,我宁愿避免这种乐趣.
在代码中表达:给定一个像这样的Perl程序:
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64;
use Storable qw/nfreeze/;
my $data = {
'string' => 'something',
'arrayref' => [1, 2, 'three'],
'hashref' => {
'a' => 'b',
},
};
print encode_base64( nfreeze($data) );
Run Code Online (Sandbox Code Playgroud)
我是在magic_function
这样的Python之后:
#!/usr/bin/env python
import base64
import pprint
import sys
def magic_function(frozen):
# A miracle happens
return thawed
if __name__ == '__main__':
frozen = base64.b64decode(sys.stdin.read())
data = magic_function(frozen)
pprint.pprint(data)
Run Code Online (Sandbox Code Playgroud)
打印: …
...在标量上下文中,
$time =~ /(\d\d):(\d\d):(\d\d)/
返回true或false值.但是,在列表上下文中,它返回匹配值的列表($1,$2,$3)
.
但是,如果在regexp中没有捕获组时模式匹配,我找不到列表上下文中返回内容的解释.测试显示它是列表(1)
(单个元素,整数1).(辅助问题 - 它总是这样,它在哪里定义?)
这使我很难做到我想要的:
if (my @captures = ($input =~ $regexp)) {
furtherProcessing(@captures);
}
Run Code Online (Sandbox Code Playgroud)
furtherProcessing
如果有匹配,我希望被调用,任何捕获的组作为参数传递.当$regexp
包含没有捕获组时问题就出现了,因为那样我想要furtherProcessing
在没有参数的情况下调用,而不是使用1
上面发生的值.我不能(1)
像这样特殊情况进行测试
if (my @captures = ($input =~ $regexp)) {
shift @captures if $captures[0] == 1;
furtherProcessing(@captures);
}
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下
$input = 'a value:1';
$regexp = qr/value:(\S+)/;
Run Code Online (Sandbox Code Playgroud)
有一个捕获的值,@captures
看起来与$regexp
匹配但没有捕获组时得到的相同.
有办法做我想要的吗?
使用SQLAlchemy Core(而不是ORM),我试图使用值中的子查询来插入多行.对于MySQL,实际的SQL看起来像这样:
INSERT INTO widgets (name, type) VALUES
('Melon', (SELECT type FROM widgetTypes WHERE type='Squidgy')),
('Durian', (SELECT type FROM widgetTypes WHERE type='Spiky'))
Run Code Online (Sandbox Code Playgroud)
但是我values()
在一个insert()
只允许我一次插入一个子句的子句上使用该方法时似乎只能使用子查询.我想用他们全部传递给在一次插入多个值Connection
的execute()
方法的绑定参数列表,但是这似乎并没有得到支持.
有可能在一次通话中做我想做的事execute()
吗?
这是一个独立的演示.请注意,这使用sqlite引擎,它不像MySQL那样支持多次插入,但SQLAlchemy代码仍然以与真实MySQL应用程序相同的方式失败.
from sqlalchemy import *
if __name__ == "__main__":
# Construct database
metadata = MetaData()
widgetTypes = Table('widgetTypes', metadata,
Column('id', INTEGER(), primary_key=True),
Column('type', VARCHAR(), nullable=False),
)
widgets = Table('widgets', metadata,
Column('id', INTEGER(), primary_key=True),
Column('name', VARCHAR(), nullable=False),
Column('type', INTEGER(), nullable=False),
ForeignKeyConstraint(['type'], ['widgetTypes.id']),
)
engine = …
Run Code Online (Sandbox Code Playgroud) 我在另一个模块中嘲笑子程序比在运行测试时遇到麻烦.
我在一个名为ParserTests.pl的文件中进行了测试.我试图在模块LogParser.pm中测试子程序(解析)
sub parse {
my ($self) = @_;
my $rr = $self->getRR;
while(1) {
my $result = $self->parseCommitSet();
if ($result eq 2) {
last;
}
my $printStatus = $self->printOut($result);
if (!$printStatus) {
say "Problem occurred with writing to output";
return 0;
}
$self->setRR(ReportRecord->new());
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我试图模拟printOut,以便它总是返回true.我想要做的是这样的:
#! /usr/bin/perl
use v5.10.0;
use strict;
use warnings;
use Test::More 'no_plan';
use Test::MockObject;
use LogParser;
{other tests…}
my $mock = Test::MockObject->new();
$mock->set_true('LogParser::printOut');
my $test100FH = getTestFH($test100SetsNoPrev);
$logParser = LogParser->new($test100FH);
is($logParser->parse, 1, …
Run Code Online (Sandbox Code Playgroud) 如果我有这样的xml文件:
<root>
<item>
<prop>something</prop>
</item>
<test>
<prop>something</prop>
</test>
<test2>
<prop>something</prop>
</test2>
</root>
Run Code Online (Sandbox Code Playgroud)
我可以
xmlTree.getroot().findall("item")
用来获取所有'item'元素.
我如何获得所有'item'或'test'元素?我想要的东西:
xmlTree.getroot().findall("item or test")
我在文档的示例中没有看到这样的内容.有任何想法吗?
在(适当的RMM级别3)RESTful HTTP API中,我希望强制客户端在更新资源时应该发出条件请求这一事实,以避免丢失更新问题.返回错误尝试无条件PUT请求的客户端会有什么适当的响应?
我注意到,(废弃?)mod_atom返回一个405 Method Not Allowed
带有Allow
设置为报头GET, HEAD
(查看源)时无条件更新尝试.这似乎有点误导 - 对我而言,这意味着PUT永远不是尝试资源的有效方法.也许响应只需要一个实体主体解释那个If-Match
或If-Unmodified-Since
必须用来使PUT
请求有条件,在这种情况下允许它?
或者400 Bad Request
在实体主体中有一个合适的解释可能是一个更好的解决方案?但同样,这感觉不太正确,因为400
当RFC 2616说(我的重点)时,它正在使用响应来违反特定于应用程序的语义:
由于语法格式错误,服务器无法理解请求.
但是,我认为400 Bad Request
用于特定于应用程序的语义正在成为一种被广泛接受的实用解决方案(引用需要!),而我只是过于迂腐.
我知道这是相当基本的,但我想知道在两个引用点之间找到字符串的最佳方法是什么.
例如:
在两个逗号之间找到字符串:
Hello, This is the string I want, blabla
Run Code Online (Sandbox Code Playgroud)
我最初的想法是创建一个列表,让它做这样的事情:
stringtext= []
commacount = 0
word=""
for i in "Hello, This is the string I want, blabla":
if i == "," and commacount != 1:
commacount = 1
elif i == "," and commacount == 1:
commacount = 0
if commacount == 1:
stringtext.append(i)
print stringtext
for e in stringtext:
word += str(e)
print word
Run Code Online (Sandbox Code Playgroud)
然而,我想知道是否有一种更简单的方法,或者可能只是一种简单的方式.谢谢!
python ×8
perl ×3
django ×2
flask ×2
virtualenv ×2
elementtree ×1
http ×1
iframe ×1
javascript ×1
mocking ×1
pip ×1
production ×1
python-3.x ×1
regex ×1
rest ×1
security ×1
sqlalchemy ×1
string ×1
testing ×1
ubuntu-10.04 ×1
unit-testing ×1
werkzeug ×1