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?
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:
ORDER BY
-Klausel möglicherweise ignoriert werden. Eine GROUP BY
-Klausel ist sehr wahrscheinlich nicht sicher zu löschen. 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? Je nach Anwendungsfall gibt es wahrscheinlich noch eine Menge anderer Überlegungen, wie:
Tags und Links python rest django-admin django-models