芹菜和Django简单的例子 [英] Celery and Django simple example

查看:144
本文介绍了芹菜和Django简单的例子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



app / models.py

 <$来自django.db导入模型的code从django.contrib.auth.models导入


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

app / views.py从django.http导入HttpResponse
从django.views.decorators.csrf导入csrf_exempt
从表单中获取

 从utils.utilities导入RegisterForm 
import create_user

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

utils / utilities.py

  def create_user (数据):
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()

有人可以提供一个实现芹菜在这个例子中?想象一下,这是一个每秒数百个请求的大型项目。

解决方案

假设你有两个Python的celery django-celery 安装,创建以下内容您的应用下的 tasks.py 文件:



utils / tasks.py

 从芹菜进口任务
#其他进口

@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()

返回无

删除您的 utils / utilities.py

在您的代码 views.py 更改 create_user 来自:

  create_user(form.cleaned_data)

to:

  create_user.delay(form.cleaned_data)

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



本地您可以使用 python manage.py celeryd 运行芹菜守护进程。



在生产中,您必须设置芹菜过程本身使用例如 upstart supervisor 或任何其他工具来控制此类过程的生命周期。 >

进一步详细记录的这里


Let's take a simple Django example.

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()

Can somebody provide an implementation of Celery in this example? Imagine this is a large project with hundreds of requests per sec.

解决方案

Assuming you have both Python's celery and django-celery installed, create the following tasks.py file under your app:

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

Delete your utils/utilities.py file in your example above.

In your code in views.py change the create_user call from:

create_user(form.cleaned_data)

to:

create_user.delay(form.cleaned_data)

Basically create_user is now a celery task; if you have the right Python packages installed (as mentioned above), code-wise (the implementation you ask for) that's it. delay executes your function asynchronously - i.e. the HTTP response is returned without waiting for the asynchronous task to complete.

Locally you can run a celery daemon process using python manage.py celeryd.

In production you have to set up the celery process itself using for instance upstart, supervisor or any other tool to control the lifecycle of such process.

Further details documented here.

这篇关于芹菜和Django简单的例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆