Django Admin verwendet RESTful API vs. Datenbank

9

Das ist eine seltsame Frage, ich weiß, aber ertragen Sie mit mir. Wir haben eine RESTful-Plattform mit Python für eine unserer iPhone-Apps entwickelt. Die Webapp-Version wurde mit Django erstellt, die auch diese API nutzt. Wir dachten, es wäre eine gute Idee, Djangos eingebaute Control Panel-Funktionen zu verwenden, um die Daten zu verwalten.

Das ist nicht das Problem. Das Problem ist, dass sich jeder dafür entschieden hat, dass das Admin-Center im Wesentlichen ein Client ist, der auf der REST-Plattform sitzt.

Also, meine Frage ist, gibt es eine Möglichkeit, die Modellschicht von Django zu manipulieren, um direkt auf unsere API zuzugreifen, anstatt direkt mit der Datenbank zu kommunizieren? Die Modellschicht würde als Client fungieren, der Anforderungen und Antworten an das Admin-Center und von diesem weitergibt.

Ich bin mir sicher, dass das möglich ist, aber ich bin mir nicht sicher, wo ich anfangen würde. Irgendwelche Eingaben?

    
Wilhelm Murdoch 26.01.2012, 01:56
quelle

1 Antwort

1

Ich erinnere mich, dass ich einmal darüber nachgedacht habe, so etwas zu tun. Zu der Zeit habe ich einen benutzerdefinierten Manager erstellt, der ein benutzerdefiniertes QuerySet verwendet. Und ich habe einige Methoden wie _filter_or_exclude() , count() , exists() , select_related() ... überschrieben und einige Eigenschaften hinzugefügt. Es dauerte weniger als eine Woche, bis eine totale Unordnung entstand, die wahrscheinlich keine Chance hatte, eines Tages zu arbeiten. Also habe ich sofort alles gestoppt und eine geeignetere Lösung gefunden.

Wenn ich es noch einmal machen müsste, würde ich lange nach Alternativen suchen. Und wenn es wirklich nach dem Besten klingt, würde ich wahrscheinlich ein benutzerdefiniertes Datenbank-Backend erstellen. Dieses Backend würde, anstatt Django ORM-Abfragen in SQL-Abfragen zu konvertieren, sie in HTTP-Anfragen konvertieren.

Ich denke, der beste Ausgangspunkt wäre, sich mit django vertraut zu machen Quellcode für Datenbank-Back-Ends .

Ich denke auch, dass es einige wichtige Dinge zu beachten gibt, bevor man mit der Entwicklung beginnt:

  • Ist die API in der Lage, jede Django ORM-Anfrage zu bearbeiten? Anders ausgedrückt: Wird eine Django-ORM-Abfrage in eine API-Anfrage übersetzt werden können?
  • Wenn nicht, können "unübersetzbare" Abfragen sicher ignoriert werden? Zum Beispiel kann eine ORDER BY -Klausel möglicherweise ignoriert werden. Eine GROUP BY -Klausel ist sehr wahrscheinlich nicht sicher zu löschen.
  • Wenn einige Abfragen weder übersetzt noch ignoriert werden können, werden sie möglicherweise sinnvoll emuliert. Wenn Ihre API beispielsweise eine COUNT() -Operation nicht unterstützt, könnten Sie sie emulieren, indem Sie die gesamten Daten abrufen und in Python mit len() zählen, aber ist das sinnvoll?
  • Wenn sie noch einige Abfragen haben, die Sie nicht verarbeiten können (was mehr als wahrscheinlich ist): Sind alle "normalen" Abfragen (in diesem Fall alle Abfragen, die möglicherweise von Django Admin verwendet werden) abgedeckt und wird es sein möglich, die API zu aktualisieren, wenn in letzter Zeit ein unbearbeiteter Fall entdeckt wird oder in einer zukünftigen Version von Django eingeführt wird?

Je nach Anwendungsfall gibt es wahrscheinlich noch eine Menge anderer Überlegungen, wie:

  • die Integrität der Daten
  • Unterstützung von Transaktionen
  • das Timing einer Abfrage, die wahrscheinlich viel höher ist als nur die Abfrage einer lokalen (oder sogar entfernten) Datenbank.
Antoine Pinsard 15.07.2016 20:42
quelle