小编Dhi*_*aTN的帖子

Python:kwargs.pop()和kwargs.get()之间的区别

我已经看到了两种方式,但我不明白有什么区别,我应该用什么作为"最佳实践":

def custom_function(**kwargs):
    foo = kwargs.pop('foo')
    bar = kwargs.pop('bar')
    ...

def custom_function2(**kwargs):
    foo = kwargs.get('foo')
    bar = kwargs.get('bar')
    ...
Run Code Online (Sandbox Code Playgroud)

python dictionary keyword-argument python-2.7 python-3.x

14
推荐指数
4
解决办法
1万
查看次数

Django干草堆飞快超级慢

我有一个简单的设置与django-haystack和嗖嗖引擎.搜索产生19个物体花了我8秒钟.我用django-debug-toolbar确定我有一堆重复的查询.

然后我将我的搜索视图更新为预取关系,以便不会发生重复查询:

class MySearchView(SearchView):
    template_name = 'search_results.html'
    form_class = SearchForm
    queryset = RelatedSearchQuerySet().load_all().load_all_queryset(
        models.Customer, models.Customer.objects.all().select_related('customer_number').prefetch_related(
            'keywords'
        )
    ).load_all_queryset(
        models.Contact, models.Contact.objects.all().select_related('customer')
    ).load_all_queryset(
        models.Account, models.Account.objects.all().select_related(
            'customer', 'account_number', 'main_contact', 'main_contact__customer'
        )
    ).load_all_queryset(
        models.Invoice, models.Invoice.objects.all().select_related(
            'customer', 'end_customer', 'customer__original', 'end_customer__original', 'quote_number', 'invoice_number'
        )
    ).load_all_queryset(
        models.File, models.File.objects.all().select_related('file_number', 'customer').prefetch_related(
            'keywords'
        )
    ).load_all_queryset(
        models.Import, models.Import.objects.all().select_related('import_number', 'customer').prefetch_related(
            'keywords'
        )
    ).load_all_queryset(
        models.Event, models.Event.objects.all().prefetch_related('customers', 'contracts', 'accounts', 'keywords')
    )
Run Code Online (Sandbox Code Playgroud)

但即便如此,搜索仍需要5秒钟.然后我使用了profiler django-debug-toolbar,它给了我这个信息:

Django调试工具栏分析器结果

据我所知,问题在于haystack/query:779::__getitem__,它被击中两次,每次耗费1.5秒.我浏览过有问题的代码,但无法理解它.那么我从哪里开始呢?

python django profiling whoosh django-haystack

13
推荐指数
1
解决办法
967
查看次数

Django过滤JSONField dicts列表

我使用新的JSONField运行Django 1.9并具有以下Test模型:

class Test(TimeStampedModel):
    actions = JSONField()
Run Code Online (Sandbox Code Playgroud)

让我们说JSONField的动作如下所示:

[
  {
    "fixed_key_1": "foo1",
    "fixed_key_2": {
      "random_key_1": "bar1",
      "random_key_2": "bar2",
    }
  },
  {
    "fixed_key_1": "foo2",
    "fixed_key_2": {
      "random_key_3": "bar2",
      "random_key_4": "bar3",
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

我希望能够为列表中的每个项目过滤foo1和foo2键.当我做 :

>>> Test.objects.filter(actions__1__fixed_key_1="foo2")
Run Code Online (Sandbox Code Playgroud)

测试位于查询集中.但当我这样做时:

>>> Test.objects.filter(actions__0__fixed_key_1="foo2")
Run Code Online (Sandbox Code Playgroud)

它不是,这是有道理的.我想做的事情如下:

>>> Test.objects.filter(actions__values__fixed_key_1="foo2")
Run Code Online (Sandbox Code Playgroud)

要么

>>> Test.objects.filter(actions__values__fixed_key_2__values__contains="bar3")
Run Code Online (Sandbox Code Playgroud)

并在查询集中进行测试.

知道是否可以这样做以及如何做?

python django django-models django-queryset django-jsonfield

13
推荐指数
3
解决办法
7950
查看次数

当syncdb与django-site的fixture时自动填充

我想在syncdb之后运行时填充django_site表我怎么能这样做我只有一个站点

django django-sites

11
推荐指数
3
解决办法
2799
查看次数

django + virtualenv + gunicorn - 没有名为 django.core.wsgi 的模块?

我已经gunicorn安装在我的虚拟环境中:

$ pip install gunicorn
Collecting gunicorn
  Using cached gunicorn-19.7.1-py2.py3-none-any.whl
Installing collected packages: gunicorn
Successfully installed gunicorn-19.7.1
Run Code Online (Sandbox Code Playgroud)

但是当我尝试用它运行我的应用程序时:

$ gunicorn helloapp.wsgi
[2017-05-18 22:42:36 +0000] [1963] [INFO] Starting gunicorn 19.6.0
[2017-05-18 22:42:36 +0000] [1963] [INFO] Listening at: http://127.0.0.1:8000 (1963)
[2017-05-18 22:42:36 +0000] [1963] [INFO] Using worker: sync
[2017-05-18 22:42:36 +0000] [1967] [INFO] Booting worker with pid: 1967
[2017-05-18 22:42:36 +0000] [1967] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File …
Run Code Online (Sandbox Code Playgroud)

python django virtualenv gunicorn

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

使用Ajax jQuery提交Django Forms的简便方法

我对Ajax相对较新,我仍在努力掌握所有概念.我试图查看一堆Ajax-Django表单提交的教程,其中大部分需要jQuery表单,这似乎不是一种简单的方法来处理表单提交给我.我很难掌握这个概念.

我正在尝试为用户注册,登录,发布创建和评论编写一些基于ajax的表单提交.到目前为止,我还没有找到一种让我更容易理解Ajax方法如何工作的方法.

我真的很感激我在这方面可以得到任何帮助.

这是我到目前为止所尝试的.

change_pw.html

{% extends "base.html" %}
    {% block title %}Change Password{% endblock %}
    {% block head %}Change Password{% endblock %}
    {% block content %}
    {% include "modal_change_pw.html" %}
    {% endblock %}
Run Code Online (Sandbox Code Playgroud)

modal_change_pw.html

<div id="modalchangepw">
<ul style="margin:5px;">
    <ul class="thumbnails" style="margin: 0 auto;background: white;">
        <div class="thumbnail row-fluid" style="background: white; padding: 10px;width: 97%; -moz-border-radius: 5px;border-radius: 5px;-moz-box-shadow:3px 3px 5px 0px #ccc;-webkit-box-shadow:3px 3px 5px 0px #ccc;box-shadow:3px 3px 5px 0px #ccc;">
            <br>
            {% if not error == '' %}
                <div class="alert alert-error">
                    <button …
Run Code Online (Sandbox Code Playgroud)

django jquery django-forms form-submit

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

Django 1.7 app config ImportError:没有名为appname.apps的模块

我正在尝试按照https://docs.djangoproject.com/en/dev/ref/applications/上的文档为我的一个名为"文章"的Django应用程序设置一个自定义应用程序配置,但是我ImportError: No module named articles.apps在执行时仍然会收到./manage.py check(或任何其他管理命令,如./manage.py runserver)

这是该项目的一棵树

projectname
    ??? apps
    ?   ??? articles
    ?   ?   ??? admin.py
    ?   ?   ??? apps.py
    ?   ?   ??? __init__.py
    ?   ?   ??? migrations
    ?   ?   ?   ??? 0001_initial.py
    ?   ?   ?   ??? __init__.py
    ?   ?   ??? models.py
    ?   ?   ??? templates
    ?   ?   ?   ??? articles
    ?   ?   ??? templatetags
    ?   ?   ?   ??? articles_tags.py
    ?   ?   ?   ??? __init__.py
    ?   ?   ??? tests.py
    ? …
Run Code Online (Sandbox Code Playgroud)

python django django-1.7

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

Django:在编辑模型时自定义FileField值

我有一个模特,有FileField.当我在视图中编辑此模型时,我想要更改其"视图"中FileField显示的"当前"值.让我解释.

models.py:

class DemoVar_model(models.Model):
    ...
    Welcome_sound=models.FileField(upload_to='files/%Y/%m/%d')
Run Code Online (Sandbox Code Playgroud)

forms.py:

class DemoVar_addform(ModelForm):
    ...
    class Meta:
        model = DemoVar_model        
Run Code Online (Sandbox Code Playgroud)

views.py:

soundform = DemoVar_addform(instance=ivrobj)
....
return render_to_response(template,{'soundform':soundform}, ....)
Run Code Online (Sandbox Code Playgroud)

现在我想在我的视图中编辑这个模型.当我在浏览器中查看时,我看到表单显示为

Welcome sound: Currently: welcome_files/2011/04/27/15_35_58_ojCompany.wav.mp3 
Change : <Choose File button>
Run Code Online (Sandbox Code Playgroud)

我想更改此"当前"值,该值描述文件在我的服务器上退出时的整个路径.我想将此字符串修剪为没有路径的文件名.我该如何做到这一点?

python django file-upload django-forms django-file-upload

9
推荐指数
2
解决办法
4167
查看次数

如何使用Celery,RabbitMQ和Django确保每个用户的任务执行顺序?

我正在运行Django,Celery和RabbitMQ.我想要实现的是确保与一个用户相关的任务按顺序执行(具体来说,当时一个,我不希望每个用户的任务并发)

  • 每当为用户添加新任务时,它应该取决于最近添加的任务.其他功能可能包括不将任务添加到队列,如果此类型的任务排队等待该用户但尚未启动.

我做了一些研究,并且:

  • 我无法找到一种方法将新创建的任务与已在Celery中排队的任务链接起来,链似乎只能链接新任务.
  • 我认为使用自定义RabbitMQ消息处理程序可以实现这两种功能,尽管它可能很难编码.
  • 我也读过关于celery-tasktree的内容,这可能是确保执行顺序的最简单方法,但是如何将新任务与已经" applied_async"task_tree或队列相关联?有什么办法可以使用这个包实现额外的无重复功能吗?

编辑:在芹菜食谱中也有这个"锁定"的例子,因为这个概念很好,我看不到一种可能的方法让它在我的情况下按预期工作 - 只是如果我无法为用户获取锁定,任务必须重试,但这意味着将它推到队列的末尾.

这里最好的做法是什么?

python django rabbitmq celery django-celery

9
推荐指数
1
解决办法
994
查看次数

使用add_periodic_task动态设置Celery(celerybeat)中的周期性任务

我正在使用Celery 4.0.1,Django 1.10我有麻烦调度任务(运行任务工作正常).这是芹菜配置:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
app = Celery('myapp')

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.conf.BROKER_URL = 'amqp://{}:{}@{}'.format(settings.AMQP_USER, settings.AMQP_PASSWORD, settings.AMQP_HOST)
app.conf.CELERY_DEFAULT_EXCHANGE = 'myapp.celery'
app.conf.CELERY_DEFAULT_QUEUE = 'myapp.celery_default'
app.conf.CELERY_TASK_SERIALIZER = 'json'
app.conf.CELERY_ACCEPT_CONTENT = ['json']
app.conf.CELERY_IGNORE_RESULT = True
app.conf.CELERY_DISABLE_RATE_LIMITS = True
app.conf.BROKER_POOL_LIMIT = 2

app.conf.CELERY_QUEUES = (
    Queue('myapp.celery_default'),
    Queue('myapp.queue1'),
    Queue('myapp.queue2'),
    Queue('myapp.queue3'),
)
Run Code Online (Sandbox Code Playgroud)

然后在tasks.py中我有:

@app.task(queue='myapp.queue1')
def my_task(some_id):
    print("Doing something with", some_id)
Run Code Online (Sandbox Code Playgroud)

在views.py中,我想安排此任务:

def my_view(request, id):
    app.add_periodic_task(10, my_task.s(id))
Run Code Online (Sandbox Code Playgroud)

然后我执行命令:

sudo systemctl start rabbitmq.service
celery -A myapp.celery_app beat -l debug
celery worker -A myapp.celery_app
Run Code Online (Sandbox Code Playgroud)

但是这项任务从未安排过.我在日志中看不到任何内容.这项任务正在起作用,因为如果在我看来我做了:

def my_view(request, …
Run Code Online (Sandbox Code Playgroud)

python django scheduled-tasks celery celerybeat

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