Python 芹菜和Django是一个简单的例子
让我们以一个简单的Django为例 app/models.pyPython 芹菜和Django是一个简单的例子,python,django,celery,scalability,Python,Django,Celery,Scalability,让我们以一个简单的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.htt
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()
在这个例子中,有人能提供芹菜的实现吗?假设这是一个每秒有数百个请求的大型项目。假设您同时安装了Python和,请在应用程序下创建以下
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\u user
调用:
create_user(form.cleaned_data)
致:
基本上,create\u user
现在是一项芹菜任务;如果您安装了正确的Python包(如上所述),那么代码方面(您要求的实现)就是这样<代码>延迟
异步执行您的函数-即返回HTTP响应而不等待异步任务完成
您可以在本地使用python manage.py celeryd
运行芹菜守护进程
在生产过程中,您必须使用例如upstart
、supervisor
或任何其他工具来设置芹菜流程本身,以控制此类流程的生命周期
进一步的细节记录在案。我会为此给你金徽章!非常感谢@TeodorScorpan谢谢:)我做了这个django芹菜模板项目,之前我花了一些时间试图让任务显示在django admin中:希望它能帮助别人!:)这是一个有用的解决方案。谢谢,只是你知道,直接要求举例往往被认为是离题的,因为他们经常来自那些之前没有做过任何研究的人。这显然不适用于你,但值得注意的是,这条总的指导原则——当你得到mo时,请参阅该部分。
create_user.delay(form.cleaned_data)