在使用 Ansible 时,我尝试使用保管的 vars 文件来存储私有变量,然后在另一个 vars 文件中以相同的角色使用这些变量。(这个想法来自“Vault Pseudo leaf crypto” 。)
例如我有一个标准的 vars 文件roles/myrole/vars/main.yml:
---
my_variable: '{{ my_variable_vaulted }}'
Run Code Online (Sandbox Code Playgroud)
然后是加密的roles/myrole/vars/vaulted_vars.yml:
---
my_variable_vaulted: 'SECRET!'
Run Code Online (Sandbox Code Playgroud)
但是当我运行剧本时,我总是收到“错误!错误!‘my_variable_vaulted’未定义”。
我在没有加密第二个文件的情况下尝试过,以确保这不是加密问题,但我遇到了相同的错误。
我有一些Django管理命令,这些命令调用其他类中的方法以从API中获取数据。这些任务可能要花很长时间才能完成,我想以简洁的方式在控制台中显示进度。
我可以使用print()类似这样的方法来输出像“ Fetched 22 of 3000”这样的一行,该行覆盖自身:
print('Fetched %d of %d' % (n, total) + ' '*30, end='\r')
Run Code Online (Sandbox Code Playgroud)
但是使用print()似乎有点令人讨厌,并且在运行测试时它会输出到控制台。因此,使用日志记录似乎更好,但是我看不到使用该方法在控制台中显示单个不断更新的“进度”行的方法。
有没有很好的方法可以做到这一点?
我正在使用带有'through'类的ManyToManyField,这在获取事物列表时会导致大量查询.我想知道是否有更有效的方式.
例如,这里有一些描述Books及其几个作者的简化类,它们通过Role类(定义"Editor","Illustrator"等角色):
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
@property
def full_name(self):
return ' '.join([self.first_name, self.last_name,])
class Role(models.Model):
name = models.CharField(max_length=50)
person = models.ForeignKey(Person)
book = models.ForeignKey(Book)
class Book(models.Model):
title = models.CharField(max_length=255)
authors = models.ManyToManyField(Person, through='Role')
@property
def authors_names(self):
names = []
for role in self.role_set.all():
person_name = role.person.full_name
if role.name:
person_name += ' (%s)' % (role.name,)
names.append(person_name)
return ', '.join(names)
Run Code Online (Sandbox Code Playgroud)
如果我调用Book.authors_names(),那么我可以得到这样的字符串:
John Doe(编辑),Fred Bloggs,Billy Bob(插画家)
它工作正常,但它执行一个查询以获取该书的角色,然后为每个人执行另一个查询.如果我正在显示一个书籍列表,这会增加很多查询.
有没有办法在每本书的单个查询中使用连接更有效地执行此操作?或者是使用批量选择之类的东西的唯一方法?
(对于奖励积分......我对authors_names()的编码看起来有点笨重 - 有没有办法让它更优雅地使用Python-esque?)
我有一个相当复杂的查询集,我目前在单个视图中使用它来获取对象列表.
我想在其他几个视图中使用相同的查询集,但不希望多次复制代码.我可以使用管理器,将查询集保存在一个地方,并在每个视图中使用它,除了查询依赖于每个页面上不同的日期.
据我了解,管理员不允许你传递变量...所以我想知道我应该把这个查询放在哪里,以免在几个视图中不断重复它.有什么想法吗?
FWIW,这是我的查询集,published_date是每个页面上更改的变量:
day_publications = Publication.objects.filter(
Q(reading__end_date__gte=published_date) | Q(reading__end_date__isnull=True),
reading__start_date__lte=published_date,
).select_related('series',)
Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery,我有一个异步AJAX请求循环.我知道我可以使用方便的'$ .when.apply(array_of_requests).then()'方法等待它们全部完成.
但我还有另一组AJAX请求,只有在每个第一个请求完成后才会执行.我想等他们也完成,但我不是100%肯定我找到了最好的方法.
这是我的请求的简化示例:
var intital_data = [1,2,3,4,5,6,7,8,9,10];
var promises = [];
var promises_inner = [];
$.each(intitial_data, function(i, n) {
var ajax_call = $.ajax({url:'http://www.domain.com/etc/'+n});
promises.push(ajax_call);
ajax_call.done(function(data) {
var ajax_call_inner = $.ajax({url:'http://www.domain.com/etc/'+data.result});
promises_inner.push(ajax_call_inner);
ajax_call_inner.done(function(data) {
// Do something with the content of data here.
});
});
});
Run Code Online (Sandbox Code Playgroud)
因此,当完成十个循环AJAX请求中的每一个时,我根据第一个的结果发出第二个AJAX请求.一切正常.
然后我有这样的事情,因为我想要等到前十个请求(存储在promises数组中)和第二个批次(存储在promises_inner中)完成:
$.when.apply($, promises).then(
function() {
// The ten outer AJAX calls are finished now.
$.when.apply($, promises_inner).then(
function() {
// The inner AJAX calls are finished now.
}
);
}
);
Run Code Online (Sandbox Code Playgroud)
在第一个$ …
我有一个Django网站,工作正常.它在数据库中有少量数据,我想用它来进行测试.我已经完成了dumpdata来生成一些.json装置.但是,当我尝试在我的应用程序("标记器")上运行测试时,我得到一个Postgresql错误,我无法解决如何解决它:
(django-projectname)$ ./manage.py test tagger
Creating test database for alias 'default'...
Problem installing fixture '/Users/phil/Projects/RIG/projectname/django-projectname/projectname/tagger/fixtures/auth_testdata.json': Traceback (most recent call last):
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/core/management/commands/loaddata.py", line 174, in handle
obj.save(using=using)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/core/serializers/base.py", line 165, in save
models.Model.save_base(self.object, using=using, raw=True)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/db/models/base.py", line 526, in save_base
rows = manager.using(using).filter(pk=pk_val)._update(values)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/db/models/query.py", line 491, in _update
return query.get_compiler(self.db).execute_sql(None)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 869, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/Users/phil/.virtualenvs/django-projectname/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用django-cumulus来提供Rackspace CloudFiles文件.我目前只在我的本地开发服务器上使用Django 1.4.2进行尝试.
我可以使用cumulus的syncstatic管理命令成功上传我的所有静态资产,但我似乎无法使用相同的设置在我的网站上显示它们.
如果我的相关设置是:
STATIC_URL = '/static/'
CUMULUS = {
'USERNAME': 'myusername',
'API_KEY': 'myapikey',
'CONTAINER': 'mycontainername',
'STATIC_CONTAINER': 'mycontainername',
}
DEFAULT_FILE_STORAGE = 'cumulus.storage.CloudFilesStorage'
STATICFILES_STORAGE = 'cumulus.storage.CloudFilesStaticStorage'
Run Code Online (Sandbox Code Playgroud)
然后,当我运行syncstatic我的所有应用程序的静态文件上传到/mycontainername/static/,正如我所期望的那样.但是当我在管理员中加载页面时,它会忽略STATIC_URL并尝试从URL http://uniquekey....r82.cf2.rackcdn.com/path/to/file.css而不是URL中提供资源http://uniquekey....r82.cf2.rackcdn.com/static/path/to/file.css.
此外,我无法看到如何让我的公共(非管理员)页面使用CloudFiles上的静态文件,而不是从本地/static/目录提供它们.
我错过了一些关键的设置,还是我做错了什么?
我正在使用tqdm显示进度条,同时完成了一些长期运行的Django管理命令。它很好用(很容易使用!),但是...
当我对代码运行单元测试时,我想停止输出进度条。而且,如果我使用cron或其他某种方式在后台运行这些命令,我也希望进度条不在输出中。
我看不到做这两种事情的简便方法,但是也许我错过了什么?
我想用厂男孩和其支持的法克尔从多个供应商生成的字符串。例如结合prefix和name:
# models.py
from django.db import models
class Person(models.Model):
full_name = models.CharField(max_length=255, blank=False, null=False)
# factories.py
import factory
class PersonFactory(factory.Factory):
class Meta:
model = models.Person
full_name = '{} {}'.format(factory.Faker('prefix'), factory.Faker('name'))
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。例如:
>>> person = PersonFactory()
>>> person.full_name
'<factory.faker.Faker object at 0x7f25f4b09e10> <factory.faker.Faker object at 0x7f25f4ab74d0>'
Run Code Online (Sandbox Code Playgroud)
我想念什么?
我正在使用 pytest 和 Flask 来测试我的视图和模板,但我不清楚如何最好地做到这一点。
我知道我可以测试 HTML 输出的内容,例如:
def test_my_view(test_client):
# test_client is a fixture representing app.test_client()
response = test_client.get("/my-url")
assert b"<h1>My page title</h1>" in response.data
Run Code Online (Sandbox Code Playgroud)
但有些事情我不确定如何最好地做:
如何测试视图正在使用哪个模板?
如何测试视图发送到模板的上下文?(例如检查它login_form是 的实例LoginForm)
如果我想测试是否存在更复杂的 HTML 标记(例如<form>具有正确action属性的标记),这是检查整个标记(例如<form method="get" class="form-lg" action="/other-url">)是否存在的唯一方法,即使我不关心其他属性?action假设页面上也有其他表单,我如何才能检查?
django ×6
python ×3
ajax ×1
ansible ×1
cron ×1
django-south ×1
factory-boy ×1
faker ×1
flask ×1
javascript ×1
jquery ×1
many-to-many ×1
pytest ×1
testing ×1
tqdm ×1