Mein Projekt befindet sich in der frühen Entwicklung. Ich lösche häufig die Datenbank und führe manage.py syncdb
sie aus, um meine App von Grund auf neu einzurichten.
Leider erscheint dies immer:
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):
Dann haben Sie einen Benutzernamen, eine gültige E-Mail-Adresse und ein Passwort angegeben. Das ist langweilig. Ich habe es satt zu tippen test\[email protected]\ntest\ntest\n
.
Wie kann ich diesen Schritt automatisch überspringen und beim Ausführen programmgesteuert einen Benutzer erstellen manage.py syncdb
?
django
automation
django-syncdb
ein bezahlter Nerd
quelle
quelle
syncdb
wurde zugunsten von Datenmigrationen veraltetAntworten:
Ich weiß, dass die Frage bereits beantwortet wurde, aber ...
Ein viel einfacherer Ansatz besteht darin, die Daten des Authentifizierungsmoduls in eine JSON-Datei zu kopieren, sobald der Superuser erstellt wurde:
Sie können die Sitzungsdaten auch sichern:
Sie können dann die Sitzungsinformationen an den Speicherauszug des Authentifizierungsmoduls anhängen (und wahrscheinlich das expire_date erhöhen, damit es nicht abläuft ... niemals ;-).
Ab dann können Sie verwenden
Laden des Superusers und seiner Sitzung beim Erstellen der Datenbank ohne interaktive Eingabeaufforderung, in der Sie nach einem Superuser gefragt werden.
quelle
initial_data.json
damit es essyncdb
findet? In den Dokumenten heißt es: "Im Fixtures-Verzeichnis jeder installierten Anwendung" . Ist das zB./eggs/Django-1.6.5-py2.7.egg/django/contrib/auth/fixtures
?Anstatt Ihre gesamte Datenbank zu löschen, löschen Sie einfach die Tabellen Ihrer App, bevor Sie die Syncdb ausführen
Dies wird für Sie in einer einzigen Zeile (pro App) erledigt:
Der erste Befehl überprüft Ihre App und generiert das erforderliche SQL zum Löschen der Tabellen. Diese Ausgabe wird dann an die Datenbank weitergeleitet, um sie auszuführen.
Führen Sie anschließend Ihre Syncdb aus, um die Tabellen neu zu erstellen:
quelle
Der Schlüssel ist,
--noinput
zum Zeitpunkt der Synchronisierung zu verwenden und dann diesenone liner
zu verwenden, um einen Superuser zu erstellenBildnachweis: http://source.mihelac.org/2009/10/23/django-avoiding-typing-password-for-superuser/
quelle
Wenn Sie - wie ich - die Möglichkeit haben möchten, wirklich mit einer neuen Datenbank zu beginnen, ohne diese Superuser-Frage gestellt zu bekommen, können Sie den Signal-Handler, der diese Frage stellt, einfach abmelden. Schauen Sie sich das Ende der Datei an:
um zu sehen, wie die Registrierung der Superuser-Funktion durchgeführt wird. Ich habe festgestellt, dass ich diese Registrierung rückgängig machen kann und die Frage während "syncdb" nie gestellt wird, wenn ich diesen Code in meine "models.py" eingefügt habe:
Ich bin nicht sicher, wie ich garantieren kann, dass dieser Code nach dem Django-Code ausgeführt wird, der die Registrierung vornimmt. Ich hatte gedacht, dass es davon abhängen würde, ob Ihre App oder die App django.contrib.auth zuerst in INSTALLED_APPS erwähnt wird, aber es scheint für mich zu funktionieren, unabhängig von der Reihenfolge, in der ich sie eingebe. Vielleicht werden sie alphabetisch erstellt und ich bin es Glück, dass der Name meiner App mit einem Buchstaben später als "d" beginnt? Oder ist Django gerade klug genug, um zuerst seine eigenen Sachen zu machen, dann meine, falls ich mit ihren Einstellungen Mist machen möchte? Lassen Sie mich wissen, wenn Sie es herausfinden. :-)
quelle
settings.DEBUG
istTrue
automatisch). Danke noch einmal!Ich habe diese Funktion überwinden mit Süd
Es ist ein Muss für jeden Django-Entwickler.
South ist ein Tool, mit dem Änderungen auf die Live-Site migriert werden können, ohne dass Informationen oder die Datenbankstruktur zerstört werden. Die resultierenden Änderungen können von Süden verfolgt und unter Verwendung der generierten Python-Dateien verwendet werden. Sie können dieselben Aktionen für eine alternative Datenbank ausführen.
Während der Entwicklung verwende ich dieses Tool, um meine Datenbankänderungen zu verfolgen - und um Änderungen an der Datenbank vorzunehmen, ohne sie zuerst zerstören zu müssen.
Vorschlagen des ersten Laufs von Süden auf einer App.
$ python manage.py schemamigration appname --init
Dadurch wird die Schemaerkennung in dieser App gestartet.
$ python manage.py migrate appname
Dadurch werden die Modelländerungen angewendet
Modell nach dem ersten Lauf ändern
$ python manage.py schemamigration appname --auto
$ python manage.py migrate appname
Modelle haben sich geändert - Daten werden nicht zerstört. Plus Süden macht viel mehr ...
quelle
Hinweis: Da der
syncdb
Befehl Version 1.7 veraltet ist . Verwenden Siemigrate
stattdessen .Auch Django 1.7 führte AppConfig ein , um den Initialisierungsprozess von Anwendungen anzupassen.
Seit Django 1.7 ist es daher am einfachsten, das zu erreichen, was Sie wollen
AppConfig
Unterklasse .Angenommen, Sie haben zufällig einen eigenen
example_app
, der zu Ihrem hinzugefügt wird,INSTALLED_APPS
und Sie möchten einen Administrator mit einem Administratorkennwort erstellen, wenn Sie./manage.py migrate
von Grund auf neu ausgeführt werden. Ich nehme auch an, dass die automatische Admin - Benutzererstellung nur in erforderlich ist dev Umgebung - nicht in Produktion .Fügen Sie den folgenden Code hinzu
example_app/apps.py
Fügen Sie außerdem den folgenden Verweis auf die App-Konfiguration in Apps hinzu
example_app/__init__.py
:Wobei die default_app_config ein String-Python-Pfad zur
AppConfig
Unterklasse ist, wie hier erwähnt .quelle
django.contrib.auth
nicht mehr , da es zur Konfigurationszeit nicht mehr verfügbar ist. Dies ist beabsichtigt und seit 1.8 veraltet, so dass es unwahrscheinlich ist, dass es jemals wieder kommt. Was sehr traurig ist ... Ich mochte diesen Hack.Der
manage.py reset
Befehl setzt Ihre Datenbank zurück, ohne den erstellten Superuser zu zerstören. Daten müssen jedoch erneut importiert werden.quelle
Sie können Django-Finalware verwenden , um dies für Sie zu tun. Fügen
finalware
Sie einfach Ihre hinzuINSTALLED_APPS
und fügen Sie Folgendes in Ihre einsettings.py
:Führen Sie dann einfach
./manage.py syncdb
(Django <1.7) oder./manage.py migrate
(Django> = 1.7) aus, und es wird automatisch ein Superuser erstellt oder der vorhandene für Sie aktualisiert.Sie werden nie mehr aufgefordert, einen Superuser zu erstellen.
quelle
Seit Django 1.7 wird empfohlen, die Datenbank durch Datenmigrationen zu füllen. Um eine Datenmigration zum Erstellen des Administrators zu erstellen, müssen Sie zunächst eine leere Migration erstellen:
./manage.py makemigrations --empty myapp --name create-superuser
Dadurch wird eine leere Migration in erstellt
myapp/migrations/000x__create-superuser.py
. Bearbeiten Sie die Datei so, dass sie folgendermaßen aussieht:quelle
Ich habe beschlossen, ein Python-Skript wie dieses zu erstellen, um alle meine Inhalte zurückzusetzen [aktualisierte Version] [1.8 auch]:
es wirkt wie ein Zauber!
PS: Stellen Sie sicher, dass Sie Ihren (Test-) Server dort stoppen, wo oben die Datenbank zuständig ist, bevor Sie dieses Skript ausführen!
quelle
Schauen Sie sich den
dumpdata
Verwaltungsbefehl an. Zum Beispiel:Wenn diese Datei, die als Fixture bezeichnet wird, den Namen
initial_data
(.xml oder .json) hat, wird diesyncdb
Befehl sie auf und Ihre Tabellen entsprechend. Sie werden weiterhin gefragt, ob Sie einen Benutzer erstellen möchten, aber ich glaube, Sie können sicher mit "Nein" antworten. Danach wird die Datenbank basierend auf Ihrem Gerät gefüllt.Weitere Informationen hierzu finden Sie in den Dokumenten .
quelle
Entwickeln mit SQLite. Löschen Sie die Datenbank, indem Sie die Datei löschen. Lade admin von Fixtures.
change manage.py (django 1.4):
quelle
if 'syncdb' in sys.argv: sys.argv.append('--noinput')
Meine Lösung bestand darin, diese Authentifizierungstabellen beim Löschen meiner Datenbank einfach nicht zu löschen.
quelle
Wenn Sie es vorziehen, den Initialisierungscode direkt in die Python-Quelldatei einzugeben, kann dieser Code geändert werden, indem Sie "manage.py" ändern (und danke für den kleinen Code von Cjkjvfnby!):
Ich zeige hier nur den Code zur Benutzererstellung, aber Sie können diesen Code nach Belieben weiter verbessern.
quelle
Ich verwende SQLite als Entwicklungsdatenbank. Nachdem Sie die Modellklassen geändert haben, löschen Sie einfach die entsprechenden Tabellen mit sqlite manager (einem Firefox-Plugin, das geöffnet ist, um die Daten zu überprüfen) und führen Sie sie aus
manage.py syncdb
, um die fehlenden Daten neu zu erstellen.quelle