Frage

Jedes Mal, wenn ich eine Seite öffnen, ich mag den gerade aktiven Projekt-ID erhalten. Dies wird durch chacking die Sub-Domain und Überprüfung der aktuell angemeldeten Benutzers ausgeführt werden es sehen können.

Sobald ich meine Ansicht erreichen möchte ich in der Lage sein zu tun,

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

Dabei gilt current_project (oder CURRENT_PROJECT oder current_project ???) wurde bereits Setup.

Kann jemand die Vor / Nachteile der verschiedenen Ansätze erklärt ich in der Dokumentation gefunden habe und mich auf dem richtigen Weg?

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

Dies war, wie ich es am Ende tat:

Decorator:

def check4project(fn):

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

Beispiel anzeigen

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

    print project
War es hilfreich?

Lösung

Es hängt alles davon ab, was Ihre Semantik von „aktuellem Projekt“ ist. Hier sind einige Möglichkeiten:

  1. Es könnte ein Merkmal des Benutzers sein: er besucht seine Profilseite und setzt ein aktuelles Projekt. Dies würde in der Datenbank gespeichert werden, und Sie würden es mit dem ORM zugreifen zu können.

  2. Es könnte ein Merkmal der URL sein, basiert ausschließlich auf Sub-Domain. Dies könnte mit Middleware erfolgen, die den Zugriff auf die Anforderung hat und zum Beispiel könnte, analysieren den Host-Namen und legen Sie ein benutzerdefiniertes Attribut auf die Anforderung, die Sie in Ihrer Ansicht Funktionen zugreifen können.

  3. Ähnlich wie # 2, könnten Sie einen Blick Dekorateur verwenden, wenn die Überprüfung Projekte für einige Ansichten getan wird, aber nicht alle. Dies ist vergleichbar mit Djangos Dekorateure für Berechtigungsprüfung.

  4. Es könnte ein Merkmal des Besuchs auf der Website des Benutzers sein: er eine Seite der Projekte besucht, wählt man auf arbeiten, und es ist klebrig, bis er ein anderes Projekt wählt. Dies würde am besten in der Sitzung gespeichert werden, die speziell für diese Art von vorübergehender Lagerung ist.

Aus Ihrer Beschreibung, es sounsd wie # 2 oder # 3 ist das Beste für Sie, je nachdem, wie Sie Ihre Ansichten aufzuteilen zwischen Teilprojekten Pflege und nicht.

Andere Tipps

Sie könnten eine context_processor machen und dann Wert aus dem Request-Objekt erhalten.

Haben Sie eine eigener Template-Tag ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top