小编Yuj*_*ita的帖子

Python - 覆盖__init__的最干净的方法,在super()调用之后必须使用可选的kwarg?

我喜欢蟒蛇的外观/感觉如何美丽,我希望这可以更清洁(可读性很棒).

什么是清洁的方式来推翻子类时要接受一个可选的关键字参数初始化,其中可选的kwarg,必须使用super()电话吗?

我有一个django表单,我想接受一个可选的用户参数,但如果我将其定义为参数之一user=None,那么通常的表单调用form({})假定位置参数引用关键字参数user.

代码说得比(我)的话更好:

def __init__(self, *args, **kwargs):
    user = None
    if 'user' in kwargs:
        user = kwargs.pop('user')
    super(BaseCheckoutForm, self).__init__(*args, **kwargs)
    if user:
        self.prefill_from_user(user)
Run Code Online (Sandbox Code Playgroud)

通过查看实际的Form类来查看它正在查找的参数,我可以使它成为最干净的,但是在python中对子类进行子类化的最大好处之一就是收集所有args并将kwargs其传递给任何子类.此外,这不会影响源中的任何更改.

def __init__(self, querydict=None, user=None):
    super(BaseCheckoutForm, self).__init__(querydict)
    if user:
        self.prefill_from_user(user)
Run Code Online (Sandbox Code Playgroud)

但不幸的是我有:

 def __init__(self, *args, **kwargs):
    # cannot define user=None as an argument because normal usage
    # of class expects a certain order of positional args
    user …
Run Code Online (Sandbox Code Playgroud)

python django

36
推荐指数
1
解决办法
3万
查看次数

Django post_save防止递归而不覆盖模型save()

有许多关于使用post_save信号递归的Stack Overflow帖子,评论和答案都是压倒性的:"为什么不覆盖save()"或者只是触发的保存created == True.

我相信不使用的好例子save()- 例如,我正在添加一个临时应用程序来处理与Order模型完全分开的订单履行数据.

框架的其余部分幸福地没有意识到实现应用程序,并且使用post_save挂钩从我们的订单模型中隔离所有与履行相关的代码.

如果我们放弃履行服务,我们的核心代码就不得不改变.我们删除了履行应用程序,就是这样.

那么,是否有任何不错的方法来确保post_save信号不会两次触发相同的处理程序?

python django django-signals

32
推荐指数
5
解决办法
2万
查看次数

Django可插拔应用程序的默认设置约定?

如果未定义应用程序中的默认设置,那么处理默认设置的dangangonautic方法是settings.py什么?

我目前default_settings在应用程序中放置了一个文件,我考虑了一些选项.我倾向于第一种选择,但可能存在我在使用时不知道的陷阱globals()

FOO = getattr(settings, 'FOO', False)经常看到应用程序在使用该设置的文件顶部执行操作,但我认为如果值/名称很长,则此方法存在可读性/重复性问题.


1:将设置放在函数中并迭代locals/set globals

def setup_defaults():
    FOO = 'bar'
    for key, value in locals().items():
        globals()[key] = getattr(settings, key, value)

setup_defaults()
Run Code Online (Sandbox Code Playgroud)

优点:

  • 只需要写一次var名称来从django设置中提取相同名称的默认值.

缺点:

  • 不习惯使用globals()并且不知道任何含义

2:写下getattr(settings, 'MY_SETTING', default_settings.MY_SETTING)每个电话

优点: - 非常清楚.

缺点: - 重复


3:始终将设置定义为 FOO = getattr(settings, 'FOO', '...setting here...')

优点: - 始终覆盖默认值

缺点:

  • 重复(必须定义var两次 - 一次是字符串形式,一次是var)
  • 设置不是可读的,因为它现在是第三个参数

4:创建实用功能 get_or_default(setting)

优点:

  • 简单
  • 不必重复设置的字符串表示

缺点:

  • 不得不称呼它

5:创建一个设置类

class Settings(object):
    FOO = 'bar'

    def __init__(self):
         # filter out …
Run Code Online (Sandbox Code Playgroud)

python django configuration

30
推荐指数
3
解决办法
7056
查看次数

有没有办法在模拟的方法/函数中访问原始函数,以便我可以修改参数并将其传递给原始函数?

我想修改传递给模块中方法的参数,而不是替换它的返回值.

我已经找到了解决这个问题的方法,但它似乎是有用的东西,并且变成了嘲弄的一课.

module.py

from third_party import ThirdPartyClass

ThirdPartyClass.do_something('foo', 'bar')
ThirdPartyClass.do_something('foo', 'baz')
Run Code Online (Sandbox Code Playgroud)

tests.py

@mock.patch('module.ThirdPartyClass.do_something')
def test(do_something):
    # Instead of directly overriding its return value
    # I'd like to modify the arguments passed to this function.

    # change return value, no matter inputs
    do_something.return_value = 'foo'

    # change return value, based on inputs, but have no access to the original function
    do_something.side_effect = lambda x, y: y, x

    # how can I wrap do_something, so that I can modify its inputs and …
Run Code Online (Sandbox Code Playgroud)

python mocking

23
推荐指数
2
解决办法
5782
查看次数

Django Forms:隐藏的模型字段?

我有一个Form.我想要包含一个返回模型的隐藏字段.我会在视图中设置它的值; 我只是需要将它发布到下一页.

我应该在表单类中使用哪个字段?

django

18
推荐指数
1
解决办法
3万
查看次数

如何散列*args**kwargs进行函数缓存?

我正在使用xlwt哪个有4k限制可以在Excel文档中定义多少样式.

通常,一个人创建如下样式:

style = xlwt.easyxf("font: bold 1")
Run Code Online (Sandbox Code Playgroud)

我简单地换成了

def cached_easyxf(self, format):
    return self._cache.setdefault(format, xlwt.easyxf(format))
Run Code Online (Sandbox Code Playgroud)

哪个效果很好.现在,我发现我需要传递关键字参数,这有时让我思考:我应该如何散列args/kwargs签名?

我应该根据str(值)创建缓存键吗?泡菜?什么是最强大的?

对于我的情况,看起来我可以将键/值转换为字符串并将其添加到我的键...但我现在好奇一个通用的方法来处理这个与不可用的类型,如 arg=[1, 2, 3]

def cached_call(*args, **kwargs):
    return cache.get(what_here)
cached_call('hello')
cached_call([1, 2, 3], {'1': True})
Run Code Online (Sandbox Code Playgroud)

python

18
推荐指数
1
解决办法
3698
查看次数

Python - 如何查看不适合屏幕的输出?

我应该说我正在寻找解决查看输出不适合屏幕的问题的解决方案.例如,范围(100)将显示终端中30个高度的最后30条线.

我只是想朝着正确的方向努力,我很好奇你们是如何解决这个问题的.

当你遇到希望可以方便地滚动某些大输出的情况时,你做了什么?

最佳答案

使用终端上的回滚缓冲区.

如果你使用的是GNU Screen,可以在其中设置defscrollback 1000或使用任何其他数字HOME/.screenrc.

使用Ctrl-a, [进入复印模式

j -    Move the cursor down by one line
k -    Move the cursor up by one line
C-u -  Scrolls a half page up.
C-b -  Scrolls a full page up.
C-d -  Scrolls a half page down.
C-f -  Scrolls the full page down.
G -    Moves to the specified line 
Run Code Online (Sandbox Code Playgroud)

最好的部分是?反向搜索,/在复制模式下进行前向搜索.

超级方便.

谢谢! …

python

15
推荐指数
2
解决办法
1万
查看次数

Django StaticFiles和Amazon S3:如何检测修改过的文件?

我正在使用django staticfiles + django- storages 和Amazon S3来托管我的数据.一切正常,但每次运行manage.py collectstatic命令时都会将所有文件上传到服务器.

看起来管理命令比较Storage.modified_time()了django-storages在S3存储中未实现的时间戳.

你们如何确定S3文件是否被修改过?

我可以在我的数据库中存储文件路径和最后修改的数据.或者有一种简单的方法从亚马逊拉出最后修改过的数据?

另一个选择:看起来我可以分配任意元数据python-boto,我可以在第一次上传时放置本地修改日期.

无论如何,这似乎是一个常见问题,所以我想问一下其他人使用过什么解决方案.谢谢!

django amazon-s3 django-staticfiles

11
推荐指数
1
解决办法
5472
查看次数

使用带有远程存储的sorl-thumbnails芹菜的指针?

我很惊讶在搜索如何使用sorl-thumbnails和S3的芹菜任务时,除了"使用芹菜"之外什么都没看到.

问题:使用远程存储导致生成缩略图时出现大量延迟(对于包含许多缩略图的页面,请考虑100s +),而缩略图引擎从远程存储下载原始文件,对其进行处理,然后上传回s3.

在sorl内建立芹菜任务的好地方在哪里,我该怎么称呼?

任何您的经验/想法将不胜感激.

我将开始在Sorl内部挖掘,找到一个更有用的地方来推迟这项任务,但是如果以前已经解决了这个问题还有一些我很好奇的事情.

  1. 什么图像立即返回?必须以某种方式告诉Sorl返回的图像不是真正的缩略图.当celery完成任务时,缓存必须无效.

  2. 干净地处理多个缩略图生成请求(仅需要给定缓存键的第一个)

就目前而言,我暂时通过使用nginx反向代理缓存来解决这个问题,该缓存可以提供命中,同时后端花费时间生成昂贵的页面(在巨大的产品网格上调整大型PNG的大小),但这是一个非常手动的过程.

python django amazon-s3 sorl-thumbnail celery

10
推荐指数
1
解决办法
1272
查看次数

PIP在使用特定SVN版本时始终重新安装包

当指定特定的SVN版本时,PIP总是下载并安装包(大大减慢了同步过程).

有没有解决的办法?通常pip检测到包已经安装在环境中并提示使用--upgrade.

我的pip_requirements文件包含以下行:

svn+http://code.djangoproject.com/svn/django/trunk/@16406#egg=Django1.4A
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

回答

  • 必须将egg name指定为精确的python包名称.
  • 一定不要用-e旗帜.
  • 不适用于PIP版本0.7,可以使用1.0.2.

python pip package-managers

8
推荐指数
1
解决办法
454
查看次数