Celery和Django简单示例

Teodor Scorpan:

让我们来看一个简单的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的实现吗?想象这是一个大型项目,每秒有数百个请求。

约瑟夫·维克多·扎米特(Joseph Victor Zammit):

假设您同时安装了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或任何其他工具来控制这种流程的生命周期。

此处记录更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章