我喜欢蟒蛇的外观/感觉如何美丽,我希望这可以更清洁(可读性很棒).
什么是清洁的方式来推翻子类时要接受一个可选的关键字参数初始化,其中可选的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) 有许多关于使用post_save
信号递归的Stack Overflow帖子,评论和答案都是压倒性的:"为什么不覆盖save()"或者只是触发的保存created == True
.
我相信不使用的好例子save()
- 例如,我正在添加一个临时应用程序来处理与Order模型完全分开的订单履行数据.
框架的其余部分幸福地没有意识到实现应用程序,并且使用post_save挂钩从我们的订单模型中隔离所有与履行相关的代码.
如果我们放弃履行服务,我们的核心代码就不得不改变.我们删除了履行应用程序,就是这样.
那么,是否有任何不错的方法来确保post_save信号不会两次触发相同的处理程序?
如果未定义应用程序中的默认设置,那么处理默认设置的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)
优点:
缺点:
2:写下getattr(settings, 'MY_SETTING', default_settings.MY_SETTING)
每个电话
优点: - 非常清楚.
缺点: - 重复
3:始终将设置定义为 FOO = getattr(settings, 'FOO', '...setting here...')
优点: - 始终覆盖默认值
缺点:
4:创建实用功能 get_or_default(setting)
优点:
缺点:
5:创建一个设置类
class Settings(object):
FOO = 'bar'
def __init__(self):
# filter out …
Run Code Online (Sandbox Code Playgroud) 我想修改传递给模块中方法的参数,而不是替换它的返回值.
我已经找到了解决这个问题的方法,但它似乎是有用的东西,并且变成了嘲弄的一课.
from third_party import ThirdPartyClass
ThirdPartyClass.do_something('foo', 'bar')
ThirdPartyClass.do_something('foo', 'baz')
Run Code Online (Sandbox Code Playgroud)
@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) 我有一个Form
.我想要包含一个返回模型的隐藏字段.我会在视图中设置它的值; 我只是需要将它发布到下一页.
我应该在表单类中使用哪个字段?
我正在使用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) 我应该说我正在寻找解决查看输出不适合屏幕的问题的解决方案.例如,范围(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)
最好的部分是?
反向搜索,/
在复制模式下进行前向搜索.
超级方便.
谢谢! …
我正在使用django staticfiles + django- storages 和Amazon S3来托管我的数据.一切正常,但每次运行manage.py collectstatic
命令时都会将所有文件上传到服务器.
看起来管理命令比较Storage.modified_time()
了django-storages在S3存储中未实现的时间戳.
你们如何确定S3文件是否被修改过?
我可以在我的数据库中存储文件路径和最后修改的数据.或者有一种简单的方法从亚马逊拉出最后修改过的数据?
另一个选择:看起来我可以分配任意元数据python-boto
,我可以在第一次上传时放置本地修改日期.
无论如何,这似乎是一个常见问题,所以我想问一下其他人使用过什么解决方案.谢谢!
我很惊讶在搜索如何使用sorl-thumbnails和S3的芹菜任务时,除了"使用芹菜"之外什么都没看到.
问题:使用远程存储导致生成缩略图时出现大量延迟(对于包含许多缩略图的页面,请考虑100s +),而缩略图引擎从远程存储下载原始文件,对其进行处理,然后上传回s3.
在sorl内建立芹菜任务的好地方在哪里,我该怎么称呼?
任何您的经验/想法将不胜感激.
我将开始在Sorl内部挖掘,找到一个更有用的地方来推迟这项任务,但是如果以前已经解决了这个问题还有一些我很好奇的事情.
什么图像立即返回?必须以某种方式告诉Sorl返回的图像不是真正的缩略图.当celery完成任务时,缓存必须无效.
干净地处理多个缩略图生成请求(仅需要给定缓存键的第一个)
就目前而言,我暂时通过使用nginx反向代理缓存来解决这个问题,该缓存可以提供命中,同时后端花费时间生成昂贵的页面(在巨大的产品网格上调整大型PNG的大小),但这是一个非常手动的过程.
当指定特定的SVN版本时,PIP总是下载并安装包(大大减慢了同步过程).
有没有解决的办法?通常pip检测到包已经安装在环境中并提示使用--upgrade
.
我的pip_requirements文件包含以下行:
svn+http://code.djangoproject.com/svn/django/trunk/@16406#egg=Django1.4A
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
-e
旗帜.0.7
,可以使用1.0.2
.