我已经看到了两种方式,但我不明白有什么区别,我应该用什么作为"最佳实践":
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) 我有一个简单的设置与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
,它给了我这个信息:
据我所知,问题在于haystack/query:779::__getitem__
,它被击中两次,每次耗费1.5秒.我浏览过有问题的代码,但无法理解它.那么我从哪里开始呢?
我使用新的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
我想在syncdb之后运行时填充django_site表我怎么能这样做我只有一个站点
我已经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) 我对Ajax相对较新,我仍在努力掌握所有概念.我试图查看一堆Ajax-Django表单提交的教程,其中大部分需要jQuery表单,这似乎不是一种简单的方法来处理表单提交给我.我很难掌握这个概念.
我正在尝试为用户注册,登录,发布创建和评论编写一些基于ajax的表单提交.到目前为止,我还没有找到一种让我更容易理解Ajax方法如何工作的方法.
我真的很感激我在这方面可以得到任何帮助.
这是我到目前为止所尝试的.
{% 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)
<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) 我正在尝试按照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) 我有一个模特,有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)
我想更改此"当前"值,该值描述文件在我的服务器上退出时的整个路径.我想将此字符串修剪为没有路径的文件名.我该如何做到这一点?
我正在运行Django,Celery和RabbitMQ.我想要实现的是确保与一个用户相关的任务按顺序执行(具体来说,当时一个,我不希望每个用户的任务并发)
我做了一些研究,并且:
applied_async
"task_tree或队列相关联?有什么办法可以使用这个包实现额外的无重复功能吗?编辑:在芹菜食谱中也有这个"锁定"的例子,因为这个概念很好,我看不到一种可能的方法让它在我的情况下按预期工作 - 只是如果我无法为用户获取锁定,任务必须重试,但这意味着将它推到队列的末尾.
这里最好的做法是什么?
我正在使用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) django ×9
python ×8
celery ×2
django-forms ×2
celerybeat ×1
dictionary ×1
django-1.7 ×1
django-sites ×1
file-upload ×1
form-submit ×1
gunicorn ×1
jquery ×1
profiling ×1
python-2.7 ×1
python-3.x ×1
rabbitmq ×1
virtualenv ×1
whoosh ×1