2008-10-14 17 views
5

Ich mache eine Menge JavaScript-Arbeit im Browser und möchte einige der Backend-Funktionen im Frontend haben. Insbesondere wäre es schön, die Funktionen get(), save(), all() und count() für den Client verfügbar zu haben. Außerdem wäre es großartig, die Feldliste des Modells bereits im generierten JavaScript-Objekt verfügbar zu haben.Generiere JavaScript-Objekte aus Django Models

Ob der aktuelle Benutzer die Datensätze lesen oder schreiben kann, ist ein separates Thema, das ich mit Djangos Authentifizierung behandeln werde. Vorläufig wäre der Abruf ein Anfang.

Kurz gesagt, gibt es Code, der ein JavaScript-Modell aus einem Django-Modell generieren würde?

Danke.

Antwort

7

Es klingt, als ob Sie eine vollständige JavaScript-Schnittstelle zu den Modell- und Abfrage-APIs suchen. Ich kann mir nicht vorstellen, dass dies jemals getan oder sogar eine einfache Aufgabe gewesen wäre. Sie müssten nicht nur JavaScript-Instanzen von Modellen generieren (viel mehr als JSON-Serialisierung, da Sie auch die Methoden verwenden möchten), sondern Sie müssen einen Webdienst bereitstellen, der alle Arten von DB-API-Aufrufen verarbeiten kann. Ich kann mir nicht einmal vorstellen, wo ich anfangen soll, und die Sicherheitsprobleme sind vielleicht zu zahlreich, um sie leicht zu überwinden.

Der alternative (und viel einfachere) Ansatz wäre die Verwendung eines der verschiedenen Django-REST-Module und der JSON-Serialisierung. Sie können eine AJAX-GET-Anforderung für eine Ressource ausführen, die durch eine Reihe von Abfrageparametern identifiziert wird, die den Filtern für verkettete Abfragegruppen entsprechen. Dies würde die JSON-Darstellung der Modellwerte zurückgeben. Sie können das JavaScript-Objekt dann ändern und eine überladene AJAX POST-Anforderung verwenden, um die Änderungen auf dem Server zu speichern. Sie hätten keinen Zugriff auf die Methoden des Modells, so dass die Funktionalität neu implementiert werden müsste. Änderungen an einem Modell sollten jedoch einfach genug sein. Dies ist im Prinzip das JavaScript-Äquivalent zur Verwendung eines HTML-Formulars zum Ändern von Daten.

+0

Ja, ich denke, das ist der richtige Ansatz. Vielleicht möchten Sie http://jacobian.org/writing/rest- worst-practices/ lesen, bevor Sie beginnen. –

0

Es klingt wie Sie JSON encode Ihre Objektdaten möchten. Weitere Informationen zum Datenformat finden Sie unter JSON.org.

+0

JSON kodieren liefert nur die Objektdaten. Es bietet nicht das Referenzmodell (oder seinen Namen) und keine der Funktionen. :( – Dimitry

1

Ich habe ein Projekt gestartet, das genau das ist, wonach Sie suchen. Sie finden es unter github_bumby_jslib.
Es unterstützt derzeit nur get(), aber ich hoffe, dass ich das bald erweitern kann. Fühlen Sie sich frei, Patches beizutragen :)

jslib ist eine Django-Anwendung mit dem Ziel, AJAX-Integration mit Ihren Django-Projekten zu vereinfachen.

0

Es ist schon eine Weile her, seit ich die ursprüngliche Frage gestellt habe und seitdem gab es eine Reihe von Entwicklungen in Djangoland. Nicht zuletzt eine großartige kleine Bibliothek namens Django REST Framework. Ich werde es für ein neues Projekt verwenden und es sieht ziemlich kewl aus.

http://www.django-rest-framework.org