小编典典

Celery和Django简单示例

python

让我们来看一个简单的Django示例。

app / models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    token = models.CharField(max_length=32)

app / views.py

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from forms import RegisterForm
from utils.utilities import create_user

@csrf_exempt
def register_view(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            create_user(form.cleaned_data)
            return HttpResponse('success')

utils / utilities.py

def create_user(data):
    user = User.objects.create_user(username=data['username'], email=None, password=data['password'])
    user.save()
    profile = UserProfile()
    profile.user = user
    profile.token = generate_token()
    profile.save()

有人可以在此示例中提供Celery的实现吗?想象这是一个大型项目,每秒有数百个请求。


阅读 236

收藏
2021-01-20

共1个答案

小编典典

假设您同时安装了Python的celerydjango-
celery
,请tasks.py在您的应用程序下创建以下文件:

utils / tasks.py

from celery import task
# other imports

@task()
def create_user(data):
    user = User.objects.create_user(
        username=data['username'], email=None, password=data['password']
    )
    user.save()
    profile = UserProfile()
    profile.user = user
    profile.token = generate_token()
    profile.save()

    return None

utils/utilities.py在上面的示例中删除文件。

在您的代码中views.py更改create_user来自以下位置的调用:

create_user(form.cleaned_data)

至:

create_user.delay(form.cleaned_data)

create_user现在基本上是芹菜任务;如果您安装了正确的Python软件包(如上所述),那么就按照代码(您所要求的实现)进行安装即可。delay异步执行您的函数-
即返回HTTP响应,而无需等待异步任务完成。

在本地,您可以使用来运行celery守护进程python manage.py celeryd

在生产中,你必须设置使用例如芹菜过程本身upstartsupervisor或任何其他工具来控制这种流程的生命周期。

此处记录更多详细信息。

2021-01-20