Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
¿Cómo refactorizar correctamente esta función en otro archivo? Django

Tengo un try y except que se usa muy a menudo, así que estoy pensando en sacarlo y convertirlo en una function en otro archivo, pero parece que no puedo hacer que funcione.

¿Puede alguien por favor darme una mano?

este es el código que uso muy, muy a menudo

 try: user = get_object_or_404(User, email=data['email']) except Exception as e: print(e) return JSONresponse(False, e.message)

Intenté convertirlo en otro archivo y lo hice de esta manera.

 def auth_token(data): try: return get_object_or_404(User, email=data['email']) except Exception as e: return JSONresponse({'status': False})

luego, cuando llamo a auth_token , lo hice de esta manera de otra manera y, por supuesto, lo importé

 user = auth_token(data)

Puedo entender que esto me devolvería JSONresponse({'status': False}) e intenté usar raise y me diría que no puedo usar JSONresponse

¿Alguien puede darme una idea de cómo se puede hacer esto?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La mejor práctica es usar parámetros tan simples como sea posible (esto hace que su función sea más fácil de probar).

Lo que está buscando en el caso de excepción es algo que se puede enviar desde auth_token a través de su vista:

 def auth_token(email): # this returns a User not a token..? try: return User.objects.get(email=email) except User.DoesNotExist: raise ImmediateHttpResponse(JSONresponse({'status': False}))

El uso sería entonces:

 def myview(request, ...): token = auth_token(data['email']) ...

Cualquier excepción ImmediateHttpResponse escapará de la vista y debe ser recogida por una clase de middleware.

Desafortunadamente, Django no viene con una clase ImmediateHttpResponse , pero TastyPie tiene una que podemos robar. Primero la clase de excepción:

 class ImmediateHttpResponse(Exception): """This exception is used to interrupt the flow of processing to immediately return a custom HttpResponse. Common uses include:: * for authentication (like digest/OAuth) * for throttling (from TastyPie). """ _response = http.HttpResponse("Nothing provided.") def __init__(self, response): self._response = response @property def response(self): return self._response

entonces el software intermedio:

 from myexceptions import ImmediateHttpResponse class ImmediateHttpResponseMiddleware(object): """Middleware that handles ImmediateHttpResponse exceptions, allowing us to return a response from deep in form handling code. """ def process_exception(self, request, exception): if isinstance(exception, ImmediateHttpResponse): return exception.response return None

Esta clase debe agregarse a su MIDDLEWARE_CLASSES en su archivo settings.py como 'mymiddleware.ImmediateHttpResponseMiddleware' .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda