我经常使用Django构建相当复杂的python应用程序.为了简化应用程序间接口,我有时会使用从模型中抽象出来的service.py模块.
作为这些"聚合功能",它们经常以循环导入结束,通过将import语句放在服务函数中可以轻松消除这些导入.
是否存在与通常移动进口尽可能接近其使用点相关的显着性能或内存成本?例如,如果我只在文件的一个函数中使用特定的导入名称,那么将导入放在该特定函数中而不是在传统位置的文件顶部似乎很自然.
此问题与此问题略有不同,因为每个导入都在函数名称空间中.
我有一个大型的python应用程序,它运行在Django服务上.我需要关闭某些操作的权限测试,所以我创建了这个上下文管理器:
class OverrideTests(object):
def __init__(self):
self.override = 0
def __enter__(self):
self.override += 1
# noinspection PyUnusedLocal
def __exit__(self, exc_type, exc_val, exc_tb):
self.override -= 1
assert not self.override < 0
@property
def overriding(self):
return self.override > 0
override_tests = OverrideTests()
Run Code Online (Sandbox Code Playgroud)
然后,应用程序的各个部分可以使用上下文管理器覆盖测试:
with override_tests:
do stuff
...
Run Code Online (Sandbox Code Playgroud)
在do stuff中,上述上下文管理器可以在不同的功能中多次使用.计数器的使用使这一点得到控制,它似乎工作得很好......直到线程介入.
一旦涉及线程,全局上下文管理器就会被重用,因此测试可能会被错误地覆盖.
这是一个简单的测试用例 - 如果thread.start_new_thread(do_id, ())使用简单的替换线do_it但是如图所示失败,则可以正常工作:
def stat(k, expected):
x = '.' if override_tests.overriding == expected else '*'
sys.stdout.write('{0}{1}'.format(k, x))
def do_it_inner():
with override_tests:
stat(2, True)
stat(3, True) # outer …Run Code Online (Sandbox Code Playgroud) 我喜欢v4但是在4.1.2中这使我在使用浏览器路由器时绊倒了:
使用Route组件中的组件,我传入了这些道具:{computedMatch, location, path}尽管文档告诉我期望{match, location, history}使用哈希路由器获得哪些内容.
为了获得传递的历史记录,我必须使用withRouter感觉非常笨重的包装器,因为相关组件是Route组件的组件prop.
文档听起来对我不错.这是一个错误吗?
使用别人代码的分支,我添加了一个模型字段并进行了通常的自动迁移:
~ $ django_admin.py migrate mezzanine_slides --auto
You cannot use automatic detection, since the previous migration does not have this whole app frozen.
Either make migrations using '--freeze mezzanine_slides' or set 'SOUTH_AUTO_FREEZE_APP = True' in your settings.py.
Run Code Online (Sandbox Code Playgroud)
我尝试使用提示的明显选项无济于事,从文档中无处可去.
我正在为一个相当复杂的模型开发一个前端表单,我仍然是新的脆形式.
我的Proposal模型使用两个m2m字段用于部分和要求,每个字段都有自定义的直通表.我正在使用带有此模板的formset来呈现提案表单:
<div class="tab-content panel-body">
<div id="basic-information"
class="tab-pane active" >
{% crispy form %}
</div>
<div id="sections"
class="tab-pane" >
{% crispy sectionmap_formset sectionmap_formset_helper %}
</div>
<div id="requirements"
class="tab-pane" >
{% crispy requirementmap_formset requirementmap_formset_helper %}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
帮助器设置如下:
class MapFormSetHelper(FormHelper):
template = 'bootstrap/table_inline_formset.html'
def __init__(self, form=None):
super(MapFormSetHelper, self).__init__(form)
self.disable_csrf = True
self.form_method = 'post'
self.form_tag = False
class SectionMapFormSetHelper(MapFormSetHelper):
def __init__(self, form=None):
super(SectionMapFormSetHelper, self).__init__(form)
self.layout = Layout('order', 'section', 'placement')
class RequirementMapFormSetHelper(MapFormSetHelper):
def __init__(self, form=None):
super(RequirementMapFormSetHelper, self).__init__(form)
self.layout = Layout('order', 'requirement', 'selected_option') …Run Code Online (Sandbox Code Playgroud) 举例来说,我将 django 添加到我的 venv 中pip install django。生成我的requirements.txt文件的通常方法是pip freeze > requirements.txt产生:
asgiref==3.2.3
Django==3.0.2
pytz==2019.3
sqlparse==0.3.0
Run Code Online (Sandbox Code Playgroud)
这是个谎言。我唯一的要求是 django,我想要的(完全有效的)requirements.txt 是:
Django>=3.0.2, <4
Run Code Online (Sandbox Code Playgroud)
有时这很重要。对于真正的应用程序,我最终会得到许多具有重叠依赖项的包。升级时这可能会或可能不会导致问题,但如果我固定了所有我不关心的依赖包,几乎总是会出现问题(在上面的示例中,它们取决于 django 开发人员,而不是我)。
为了优化依赖项臃肿的requirements.txt 文件,我可以手动检查源代码(导致上面的requirements.txt 为空;)),但对于任何实际应用程序来说,这很快就会变得不切实际。
我发现ui可以排序,并且它可以很好地用于简单的列表等.我的应用程序已经使用了ui-bootstrap,我想对手风琴元素进行排序.
html看起来不错:
<div ng:controller="controller">
<accordion ui:sortable ng:model="list">
<accordion-group ng:repeat="item in list" class="item">
<accordion-heading>{{item}}</accordion-heading>
</accordion-group>
</accordion>
</div>
Run Code Online (Sandbox Code Playgroud)
然而,虽然这适用于为ul/li等交换的手风琴比特,但它不适用于手风琴元素.这是非工作小提琴.拖动动作只是拿起整个手风琴.
这是一个错误还是我做错了什么?
这个功能有效:
function refreshCodeMirror(){
$("textarea").each(function(){
var codeMirror = $(this).data('codeMirror');
setTimeout(function(codeMirror){
return function () {
codeMirror.refresh();
}
}(codeMirror), 10)
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我试图将其简化为:
function refreshCodeMirror(){
$("textarea").each(function(){
var codeMirror = $(this).data('codeMirror');
setTimeout(codeMirror.refresh, 10)
});
}
Run Code Online (Sandbox Code Playgroud)
简化不起作用.
一些(可能不相关)背景:
在onclick中为django模板中的bootstrap tab-header调用了refreshCodeMirror函数:
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs" role="tablist">
{% for field in form_tab_fields %}
<li role="presentation"{% if forloop.first %} class="active"{% endif %}>
<a class="tab-header" href="#{{ field.id_for_label }}_tab" data-toggle="tab" onclick="refreshCodeMirror()">{{ field.label_tag }}</a>
</li>
{% endfor %}
</ul>
<div class="tab-content">
{% for field in form_tab_fields %}
<div …Run Code Online (Sandbox Code Playgroud) django ×4
python ×3
angularjs ×1
codemirror ×1
django-south ×1
javascript ×1
jquery ×1
pip ×1
python-2.7 ×1
react-router ×1