芹菜和Django简单的例子 [英] Celery and Django simple example
问题描述
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屋!