template tag registered one not must library example custom create assignment_tag python django celery scalability

python - example - is not a registered tag library. must be one of:



Ejemplo simple de Aplery y Django (1)

Tomemos un ejemplo simple de 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()

¿Alguien puede proporcionar una implementación de apio en este ejemplo? Imagine que este es un proyecto grande con cientos de solicitudes por segundo.


Suponiendo que tienes el celery Python y el celery django-celery instalados, crea el siguiente archivo tasks.py en tu aplicación:

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

Elimine su archivo utils/utilities.py en su ejemplo anterior.

En su código en views.py cambie la llamada a create_user desde:

create_user(form.cleaned_data)

a:

create_user.delay(form.cleaned_data)

Básicamente create_user ahora es una tarea de apio; si tiene instalados los paquetes Python correctos (como se mencionó anteriormente), en cuanto al código (la implementación que solicita) eso es todo. delay ejecuta su función de forma asíncrona, es decir, la respuesta HTTP se devuelve sin esperar a que se complete la tarea asíncrona.

Localmente puede ejecutar un proceso de demonio de apio usando python manage.py celeryd .

En producción, debe configurar el proceso de apio utilizando, por ejemplo, upstart , supervisor o cualquier otra herramienta para controlar el ciclo de vida de dicho proceso.

Más detalles documentados here .