小编whi*_*hat的帖子

django如何异步执行函数,即将任务移交给子进程并返回响应

我正在使用 django 2.0 和 python 3.6。

用户注册包括发送验证邮件。而且这个邮件发送过程需要更长的时间,让用户一直等待。

我需要什么?:如果用户注册表单有效,则邮件详细信息将发送到另一个任务处理程序,无论邮件是否发送,该功能都必须恢复并返回响应。

def new_user_registration(request):
    form = CustomUserCreationForm(request.POST or None)
    if form.is_valid():
        user = form.save()
        send_verification_mail(user) #<= taking more time.
        return render(request, 'registration/signup.html')
Run Code Online (Sandbox Code Playgroud)

即,send_verification_mail必须异步调用。如何实现?

注意:我是 django 和 python 的新手。

python django django-forms django-views python-3.x

6
推荐指数
1
解决办法
1422
查看次数

如何从 django 中的数据库重新加载整个查询集?

我正在用芹菜运行定期任务。其中一项任务通过过滤器从数据库获取对象:

pages = Page.objects.filter(active=True)
Run Code Online (Sandbox Code Playgroud)

最初(在启动 celery 本身之前),db 中有 10 个这样的对象active=True。该任务在启动时会在所有这 10 个对象上相应地执行。

from django.db import transaction
from celery.task import task
from celery import group
from .models import Page

#@transaction.atomic
@task()
def check_pages():
    #@transaction.commit()
    pages = Page.objects.filter(active=True) #not updated later
    g = group(page_check.s(page.id) for page in pages)
    g()


#settings.py
app.conf.beat_schedule = {
    'run-every-1-second': {
        'task': 'tasks.check_pages',
        'schedule': 1.0,
    },
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我添加另一个Page对象active=True,则任务中不会识别或过滤该对象(该任务已经定期运行)。

我知道obj.reload_from_db()。但这仅适用于重新加载对象,而不适用于<QuerySet>.

我也尝试使用transaction.commit()with @transaction.atomic。但这会停止任务的执行,因为事务不适用于多个工作人员和任务。

我在这里做错了什么?

python django celery celerybeat

6
推荐指数
1
解决办法
7768
查看次数

通过任务执行数据库查询时,celery 出现 django 错误:在线程中创建的 DatabaseWrapper 对象只能在同一线程中使用

堆:

姜戈3.0.2
蟒蛇3.8.1
芹菜4.4.0
雷迪斯3.2.0

启动芹菜的命令:celery -A app_project worker -l info

我用来celery在我的项目中运行后台任务django。在开发机器上它运行完美,没有任何错误。开发和生产都在同一个堆栈上运行;我已经手动检查并匹配它们。然而,我仍然面临这个问题。

问题:Celery 在尝试对数据库进行查询时抛出以下错误。

Traceback (most recent call last):
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/celery/app/trace.py", line 385, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/celery/app/trace.py", line 650, in __protected_call__
    return self.run(*args, **kwargs)
  File "/webapps/app/backend/app/tasks.py", line 22, in task_assign_photo_to_dish
    if dishq.exists():
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/django/db/models/query.py", line 777, in exists
    return self.query.has_results(using=self.db)
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 537, in has_results
    return compiler.has_results()
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1114, in has_results
    return bool(self.execute_sql(SINGLE))
  File "/webapps/app/.virtualenvs/base38/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", …
Run Code Online (Sandbox Code Playgroud)

django redis celery python-3.x

5
推荐指数
1
解决办法
1623
查看次数

Android Studio:无需我干预即可编辑文件

我一直在寻找一个错误,一个解决方案说要做:“文件>使缓存无效并重新启动”

但后来我发现我的build.gradle替换为未知数据。

后来我又用“以前的”数据替换了它。并再次执行相同的“文件 > 使缓存无效并重新启动”

现在,我的activity_main.xml文件被替换为:

<component name="libraryTable">
  <library name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar">
    <CLASSES>
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support.constraint/constraint-layout-solver/1.1.3/bde0667d7414c16ed62d3cfe993cff7f9d732373/constraint-layout-solver-1.1.3.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</component>   
Run Code Online (Sandbox Code Playgroud)

是什么触发了这个?我在这里丢失了我的 XML 代码。

android android-studio

4
推荐指数
2
解决办法
331
查看次数

如何在 Django 中自定义 related_name 参数

我有一个抽象模型和两个子模型,例如:

class Invoice(models.Model):
    user = models.ForeignKey("User", related_name='%(class)s')

    class Meta:
        abstract=True

class SaleInvoice(Invoice):
    field_sale = models.CharField(max_length=255)

class PurchaseInvoice(Invoice):
    field_purchase = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

现在,子模型的反向名称将是saleinvoicesand purchaseinvoices。但我需要的是sale_invoicespurchase_invoices。如何实现这一目标?CamelCase 之间有一个下划线。

python django django-models django-forms python-3.x

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