2013-11-23 34 views
33

Basit bir Django örneği alalım.Kereviz ve Django basit örnek

uygulama/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) 

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

birileri bu örnekte Kereviz bir uygulama sağlayabilir ? Saniyede yüzlerce istek içeren büyük bir proje olduğunu düşünün. Size varsayarsak

+1

Sadece bildiğiniz gibi, örneklerle ilgili doğrudan talepler, daha önce hiç araştırma yapmayan kişilerden geldiklerinden, konu dışı sayılmaya eğilimlidir. Bu, sizin için geçerli değildir, ancak bu genel kılavuzun farkında olmakta fayda var - bir yardım aldığınızda [Yardım] (http://stackoverflow.com/help) bölümüne bakın. – halfer

cevap

76

var hem Python en celery ve kurulu django-celery, uygulamanızda altında aşağıdaki tasks.py dosyası oluşturmak: Yukarıdaki örnekte sizin utils/utilities.py dosyasını silin

utils'i/

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 

tasks.py. views.py değişimde Kodunuzda

create_user görüşmesi:

create_user(form.cleaned_data) 

için: Temelde

create_user.delay(form.cleaned_data) 

create_user şimdi kereviz görevdir; Eğer doğru Python paketlerine sahipseniz (yukarıda belirtildiği gibi), kod-bilge (istediğiniz uygulama) budur. delay, işlevinizi senkronize olmayan bir şekilde yürütür - örneğin, eşzamansız görevin tamamlanmasını beklemeden HTTP yanıtı döndürülür. Yerel olarak, python manage.py celeryd kullanarak bir kereviz arka plan işlemini çalıştırabilirsiniz.

Üretimde, örneğin upstart, supervisor veya böyle bir işlemin yaşam döngüsünü kontrol etmek için başka bir araç kullanarak kereviz işleminin kendisini ayarlamanız gerekir.

Daha fazla bilgi belgelendirilmiş.

+0

Bunun için sana altın rozetler verirdim! Çok teşekkürler! –

+0

@TeodorScorpan Teşekkürler :) –

+2

Bu django-kereviz şablonu projesini django yöneticisinde görünecek görevler almaya çalışırken biraz zaman geçirdikten sonra yaptım: https://github.com/mikeumus/django-celery-example Birisine yardım ederse ! :) – Mikeumus