Question

Chaque fois que j'ouvre une page, je souhaite obtenir l'identifiant de projet actuellement actif. Cela sera fait en vérifiant le sous-domaine et en vérifiant que l'utilisateur actuellement connecté peut le voir.

Une fois que j'atteins mon point de vue, je veux pouvoir le faire

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

WHere current_project (ou CURRENT_PROJECT ou current_project ???) a déjà été configuré.

Quelqu'un peut-il expliquer les avantages / inconvénients des différentes approches que j'ai trouvées dans la documentation et me mettre sur la bonne voie?

  1. Sessions
  2. Middleware
  3. Threading
  4. intégrées

C’est ce que j’ai fait à la fin:

Décorateur:

def check4project(fn):

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

Voir l'exemple

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

    print project
Était-ce utile?

La solution

Tout dépend de la sémantique de votre "projet actuel". sont. Voici quelques possibilités:

  1. Cela pourrait être une caractéristique de l'utilisateur: il visite sa page de profil et définit un projet en cours. Cela serait stocké dans la base de données et vous y auriez accès avec l'ORM.

  2. Cela pourrait être une caractéristique de l'URL, basée uniquement sur le sous-domaine. Cela peut être fait avec un middleware, qui a accès à la requête et peut, par exemple, analyser le nom d'hôte et définir un attribut personnalisé pour la requête à laquelle vous pouvez accéder dans vos fonctions d'affichage.

  3. Comme pour le n ° 2, vous pouvez utiliser un décorateur de vues si la vérification des projets est effectuée pour certaines vues, mais pas toutes. Ceci est similaire aux décorateurs de Django pour la vérification des autorisations.

  4. Cela pourrait être une caractéristique de la visite du site sur son site: il visite une page de projets, en choisit un sur lequel il travaille et reste collant jusqu'à ce qu'il choisisse un autre projet. Ce serait mieux stocké dans la session, qui est spécifiquement pour ce type de stockage transitoire.

D'après votre description, il est préférable de choisir # 2 ou # 3, selon la façon dont vos points de vue se divisent entre se soucier des sous-projets et non.

Autres conseils

Vous pouvez créer un processeur de contexte puis récupérer votre valeur à partir de l'objet de requête.

Avez-vous envisagé un balise de modèle personnalisé ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top