让我们来看一个简单的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的实现吗?想象这是一个大型项目,每秒有数百个请求。
假设您同时安装了python的celery和django-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
。
在生产中,你必须设置使用例如芹菜过程本身upstart
,supervisor
或任何其他工具来控制这种流程的生命周期。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句