2009-09-13 12 views
5

Za każdym razem, gdy otworzę stronę, chcę uzyskać aktualnie aktywny identyfikator projektu. Zostanie to zrobione przez chowanie poddomeny i weryfikacja, czy aktualnie zalogowany użytkownik może ją wyświetlić.Opcje udostępniania zmiennych przez Django

Gdy sięgam mój pogląd Chcę być w stanie zrobić

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

gdzie current_project (lub CURRENT_PROJECT lub current_project ???) został już setup.

Czy ktoś może wyjaśnić zalety/wady różnych podejść, które znalazłem w dokumentach i umieścić mnie na właściwej drodze?

  1. Sesje
  2. Middleware
  3. gwintów
  4. builtins

To było jak zrobiłem to w końcu:

Dekorator:

def check4project(fn): 

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

Zobacz przykład

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

    print project 

Odpowiedz

4

Wszystko zależy od tego, jaka jest twoja semantyka "obecnego projektu". Oto kilka możliwości:

  1. Może to być charakterystyka użytkownika: odwiedza stronę profilu i ustawia bieżący projekt. Zostanie to zapisane w bazie danych i będziesz mieć do niego dostęp za pomocą ORM.

  2. Może to być charakterystyczny URL, oparty wyłącznie na poddomenie. Można to zrobić za pomocą oprogramowania pośredniego, które ma dostęp do żądania, i może na przykład przeanalizować nazwę hosta i ustawić niestandardowy atrybut na żądanie dostępu do funkcji widoku.

  3. Podobnie jak w przypadku # 2, można użyć dekoratora widoku, jeśli sprawdzanie projektów odbywa się dla niektórych widoków, ale nie wszystkich. Jest to podobne do dekoratorów Django do sprawdzania autoryzacji.

  4. Może to być charakterystyka wizyty użytkownika na stronie: odwiedza stronę projektów, wybiera jedną do pracy i jest lepka, dopóki nie wybierze innego projektu. Najlepiej byłoby to zapisać w sesji, która jest przeznaczona specjalnie dla tego rodzaju przejściowej pamięci.

Z Twojego opisu, jak to sounsd # 2 lub # 3 jest najlepszy dla Ciebie, w zależności od tego, jak twoje poglądy podzielić między dbając o podprojektów i nie.

+0

Dzięki za pomocną odpowiedź pomogłeś wyjaśnić różne opcje dla mnie. Podoba mi się dźwięk 3. ponieważ jest to łatwy sposób sprawdzenia, czy użytkownik ma dostęp do projektu w tym samym czasie i większość, ale nie wszystkie widoki muszą być świadome projektu. – PhoebeB

+0

+1 dla dekoratora widoku. –

0

Czy zastanawiałeś się custom template tag?

+0

Głównie chcę tego w widoku przed wywołaniem szablonu, ale dzięki za wkład. – PhoebeB

1

Można utworzyć proces_procedury, a następnie uzyskać wartość z obiektu żądania.

+0

process_procesora nie byłby najlepszym rozwiązaniem tego problemu, ale rozwiązuje kolejny, który miałem! Dzięki. – PhoebeB

Powiązane problemy