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 .