Opciones de Django para hacer que las variables estén ampliamente disponibles

StackOverflow https://stackoverflow.com/questions/1417405

  •  07-07-2019
  •  | 
  •  

Pregunta

Cada vez que abro una página, quiero obtener la identificación del proyecto actualmente activa. Esto se realizará al bloquear el subdominio y verificar que el usuario actualmente conectado puede verlo.

Una vez que llegue a mi vista, quiero poder hacerlo

tasks = Task.objects.filter(project = current_project)

WHere current_project (o CURRENT_PROJECT o current_project ???) ya se ha configurado.

¿Alguien puede explicar los pros / contras de los diversos enfoques que he encontrado en los documentos y ponerme en el camino correcto?

  1. Sesiones
  2. Middleware
  3. Enhebrado
  4. incorporados

Así fue como lo hice al final:

Decorador:

def check4project(fn):

    current_project = 'fred'
    def check(*args, **kw):
        kw['project']=current_project
        return fn(*args, **kw)
    return check

Ver ejemplo

@login_required
@check4project
@tweetpost
def index(request, project=0):

    print project
¿Fue útil?

Solución

Todo depende de cuál sea su semántica del " proyecto actual " son. Aquí hay algunas posibilidades:

  1. Podría ser una característica del usuario: visita su página de perfil y establece un proyecto actual. Esto se almacenaría en la base de datos y accedería a él con el ORM.

  2. Podría ser una característica de la URL, basada únicamente en el subdominio. Esto podría hacerse con middleware, que tiene acceso a la solicitud, y podría, por ejemplo, analizar el nombre de host y establecer un atributo personalizado en la solicitud a la que podría acceder en sus funciones de vista.

  3. Similar al # 2, podría usar un decorador de vistas si se verifican proyectos para algunas vistas pero no para todas. Esto es similar a los decoradores de Django para verificar la autorización.

  4. Podría ser una característica de la visita del usuario al sitio: visita una página de proyectos, elige uno para trabajar y queda pegajoso hasta que elige otro proyecto. Esto se almacenaría mejor en la sesión, que es específicamente para este tipo de almacenamiento transitorio.

Según su descripción, parece que # 2 o # 3 es lo mejor para usted, dependiendo de cómo sus puntos de vista se dividan entre preocuparse por los subproyectos y no.

Otros consejos

Podría crear un procesador_contexto y luego obtener su valor del objeto de solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top