Datenbank und Entwicklungs-Webserver

Nun können wir die Datenbank aktualisieren und danach den Entwicklungs-Webserver auf rufen, um das Kochbuch über die Admin-Applikation zu befüllen.

Datenmodel überprüfen

Als erstes solltest du dein Datenmodel mit folgendem Kommando überprüfen:

$ python manage.py validate

Django überprüft das Datenmodel automatisch bei allen Operationen, die Models benutzten. Mit Hilfe dieses Befehls kannst du die Prüfung auch gezielt durchführen.

Datenbank synchronisieren

Aus den Models müssen nun SQL Queries erzeugt werden, um die Datenbank zu füllen.

Mit dem folgenden Kommando kannst du dir die Queries ausgeben lassen:

$ python manage.py sqlall recipes
BEGIN;
CREATE TABLE "recipes_category" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(100) NOT NULL,
    "slug" varchar(50) NOT NULL UNIQUE,
    "description" text NOT NULL
)
;
CREATE TABLE "recipes_recipe_category" (
    "id" integer NOT NULL PRIMARY KEY,
    "recipe_id" integer NOT NULL,
    "category_id" integer NOT NULL REFERENCES "recipes_category" ("id"),
    UNIQUE ("recipe_id", "category_id")
)
;
CREATE TABLE "recipes_recipe" (
    "id" integer NOT NULL PRIMARY KEY,
    "title" varchar(255) NOT NULL,
    "slug" varchar(50) NOT NULL UNIQUE,
    "ingredients" text NOT NULL,
    "preparation" text NOT NULL,
    "time_for_preparation" integer,
    "number_of_portions" integer NOT NULL,
    "difficulty" smallint NOT NULL,
    "author_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "date_created" datetime NOT NULL,
    "date_updated" datetime NOT NULL
)
;
CREATE INDEX "recipes_recipe_cc846901" ON "recipes_recipe" ("author_id");
COMMIT;

Um diese Queries direkt auszuführen und so die Tabellen und Indizes anzulegen musst du folgendes Kommando ausführen

$ python manage.py syncdb
Creating tables ...
Creating table recipes_category
Creating table recipes_recipe_category
Creating table recipes_recipe
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Entwicklungs-Webserver starten

Nachdem die Datenbank aktualisiert wurde kannst du nun wieder den Entwicklungs-Webserver starten:

$ python manage.py runserver
Validating models...

0 errors found
Django version 1.4, using settings 'cookbook.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Unter der URL http://127.0.0.1:8000/admin/recipes/ kannst du nun ein paar Rezepte anlegen.

Export und Import von Daten mit Hilfe von JSON

Damit man Daten zwischen verschiedenen Systemen austauschen kann gibt es in Django eingebaute Export- und Importfunktionen. Mit dem Kommando dumpdata kannst du die eben erstellten Models aus der Applikation recipes exportieren

$ mkdir recipes/fixtures
$ python manage.py dumpdata --indent 4 recipes > recipes/fixtures/initial_data.json

Django lädt die Fixtures aus einer Datei mit dem Namen initial_data.json jedes mal wenn du syncdb ausführst. Die gerade gespeicherten Daten werden also automatisch geladen wenn du die Models löscht und neu anlegst.

Außerdem kannst du die Daten auch manuell mit dem Befehl loaddata laden

$ python manage.py loaddata recipes/fixtures/initial_data.json
Installed 4 object(s) from 1 fixture(s)

Bemerkung

Um Daten aus anderen Quellen in Django zu importieren eignet sich loaddata nur bedingt, da in den Fixtures auch immer die Primärschlüssel definiert sind. Es gibt andere Apps, wie zum Beispiel CSV importer, die besser zum regelmäßigen Import von neuen Daten geeignet sind.