小编Phi*_*ord的帖子

在第二个 var 文件中使用一个 Ansible var 文件中的变量

在使用 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’未定义”。

我在没有加密第二个文件的情况下尝试过,以确保这不是加密问题,但我遇到了相同的错误。

ansible ansible-vault

6
推荐指数
1
解决办法
3380
查看次数

显示来自Django管理命令的任务进度

我有一些Django管理命令,这些命令调用其他类中的方法以从API中获取数据。这些任务可能要花很长时间才能完成,我想以简洁的方式在控制台中显示进度。

我可以使用print()类似这样的方法来输出像“ Fetched 22 of 3000”这样的一行,该行覆盖自身:

print('Fetched %d of %d' % (n, total) + ' '*30, end='\r')
Run Code Online (Sandbox Code Playgroud)

但是使用print()似乎有点令人讨厌,并且在运行测试时它会输出到控制台。因此,使用日志记录似乎更好,但是我看不到使用该方法在控制台中显示单个不断更新的“进度”行的方法。

有没有很好的方法可以做到这一点?

python django django-logging

6
推荐指数
1
解决办法
948
查看次数

如何让Django ManyToMany'通过'查询更有效率?

我正在使用带有'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?)

python django many-to-many

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

在Django中放置常见查询的位置?

我有一个相当复杂的查询集,我目前在单个视图中使用它来获取对象列表.

我想在其他几个视图中使用相同的查询集,但不希望多次复制代码.我可以使用管理器,将查询集保存在一个地方,并在每个视图中使用它,除了查询依赖于每个页面上不同的日期.

据我了解,管理员不允许你传递变量...所以我想知道我应该把这个查询放在哪里,以免在几个视图中不断重复它.有什么想法吗?

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)

django django-queryset

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

如何等待嵌套的异步jQuery AJAX请求完成?

我正在使用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)

在第一个$ …

javascript ajax jquery

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

在auth上运行Django测试时出现"重复键值"错误

我有一个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)

testing django django-south

5
推荐指数
0
解决办法
1301
查看次数

如何使用django-cumulus来提供静态文件?

我正在尝试使用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/目录提供它们.

我错过了一些关键的设置,还是我做错了什么?

django rackspace-cloud django-staticfiles

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

在运行测试或通过cron运行代码时使tqdm的输出静音

我正在使用tqdm显示进度条,同时完成了一些长期运行的Django管理命令。它很好用(很容易使用!),但是...

当我对代码运行单元测试时,我想停止输出进度条。而且,如果我使用cron或其他某种方式在后台运行这些命令,我​​也希望进度条不在输出中。

我看不到做这两种事情的简便方法,但是也许我错过了什么?

django cron tqdm

5
推荐指数
4
解决办法
1539
查看次数

在Factory Boy中,如何连接使用Faker创建的字符串?

我想用厂男孩其支持法克尔从多个供应商生成的字符串。例如结合prefixname

# 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)

我想念什么?

python faker factory-boy

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

如何使用 pytest 测试 Flask 视图上下文和模板?

我正在使用 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)

但有些事情我不确定如何最好地做:

  1. 如何测试视图正在使用哪个模板?

  2. 如何测试视图发送到模板的上下文?(例如检查它login_form是 的实例LoginForm

  3. 如果我想测试是否存在更复杂的 HTML 标记(例如<form>具有正确action属性的标记),这是检查整个标记(例如<form method="get" class="form-lg" action="/other-url">)是否存在的唯一方法,即使我不关心其他属性?action假设页面上也有其他表单,我如何才能检查?

pytest flask

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