Domanda

Ogni volta che apro una pagina voglio ottenere l'id del progetto attualmente attivo. Ciò avverrà eseguendo il chacking del sottodominio e verificando che l'utente attualmente connesso possa visualizzarlo.

Una volta raggiunto il mio punto di vista, voglio poterlo fare

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

DOVE è stato già impostato current_project (o CURRENT_PROJECT o current_project ???).

Qualcuno può spiegare i pro / contro dei vari approcci che ho trovato nei documenti e mettermi sulla buona strada?

  1. Sessions
  2. Middleware
  3. Threading
  4. builtins

Alla fine è stato così:

Decorator:

def check4project(fn):

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

Visualizza esempio

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

    print project
È stato utile?

Soluzione

Tutto dipende da quale tua semantica del "progetto corrente" siamo. Ecco alcune possibilità:

  1. Potrebbe essere una caratteristica dell'utente: visita la sua pagina del profilo e imposta un progetto corrente. Questo sarebbe archiviato nel database e si accederà con l'ORM.

  2. Potrebbe essere una caratteristica dell'URL, basata esclusivamente sul sottodominio. Ciò potrebbe essere fatto con il middleware, che ha accesso alla richiesta e, ad esempio, potrebbe analizzare il nome host e impostare un attributo personalizzato sulla richiesta a cui è possibile accedere nelle funzioni di visualizzazione.

  3. Simile al n. 2, è possibile utilizzare un decoratore di viste se il controllo dei progetti viene eseguito per alcune viste ma non per tutte. Questo è simile ai decoratori di Django per il controllo dell'autorizzazione.

  4. Potrebbe essere una caratteristica della visita dell'utente al sito: visita una pagina di progetti, ne sceglie uno su cui lavorare ed è appiccicoso finché non sceglie un altro progetto. Questo sarebbe meglio archiviato nella sessione, che è specificamente per questo tipo di archiviazione temporanea.

Dalla tua descrizione, sembra che il numero 2 o il numero 3 siano i migliori per te, a seconda di come le tue opinioni si dividono tra cura dei sottoprogetti e non.

Altri suggerimenti

Puoi creare un context_processor e quindi ottenere il tuo valore dall'oggetto richiesta.

Hai considerato un tag modello personalizzato ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top