So erstellen Sie eine Django-App und verbinden sie mit einer Datenbank

Einführung

Django ist ein kostenloses und in Python geschriebenes Open-Source-Webframework, das Skalierbarkeit, Wiederverwendbarkeit und schnelle Entwicklung ermöglicht.

In diesem Tutorial erfahren Sie, wie Sie die erste Grundlage für eine Blog-Website mit Verbindungen zu einer MySQL-Datenbank einrichten. Dazu müssen Sie die Grundstruktur der Blog-Webanwendung mitdjango-admin erstellen, die MySQL-Datenbank erstellen und anschließend die Webanwendung mit der Datenbank verbinden.

Voraussetzungen

Dieses Tutorial ist das zweite Tutorial in derDjango Development-Serie. Um diesem Lernprogramm zu folgen, müssen Sie Folgendes ausführen:

  • Installieren Sie die erforderliche Software, um Django auf einem Ubuntu 16.04-Server zu verwenden. Wenn Sie keinen Server mit Sudo-Rechten eingerichtet oder Django noch nicht installiert haben, können Sie dem ersten Tutorial in dieser Reihe folgen: „https://www.digitalocean.com/community/tutorials/how-to-install -django-und-Einrichten-einer-Entwicklungsumgebung-auf-Ubuntu-16-04 [Installieren von Django und Einrichten einer Entwicklungsumgebung unter Ubuntu 16.04]. “

  • Installieren Sie MySQL, bevor Sie dieses Tutorial durcharbeiten. Wenn Sie es noch nicht installiert haben, können Siestep 2 of “How To Install the Latest MySQL on Ubuntu 16.04” folgen, einschließlich der Befehle zum Installieren von MySQL.

Mit den installierten Voraussetzungen und der Einrichtung unserer Django-Entwicklungsumgebung können wir mit der Erstellung unserer App fortfahren.

[[Schritt-1 - Erstellen des anfänglichen Django-Projektskeletts]] == Schritt 1 - Erstellen Sie das anfängliche Django-Projektskelett

Um die Grundlagen für unsere Anwendung zu schaffen, müssen wir das Projektskelett mit dem Befehldjango-admingenerieren. Dieses generierte Projekt wird das Fundament unserer Blog-App sein.

Das erste, was wir tun müssen, ist zum Home-Verzeichnis zu navigieren, was wir mit dem folgenden Befehl tun können:

cd ~

Als nächstes können wir den Inhalt unseres aktuellen Verzeichnisses auflisten:

ls

Wenn Sie mit dem Beginn dieser Serie von vorne begonnen haben, werden Sie feststellen, dass es ein Verzeichnis gibt:

Outputdjango-apps

Dies enthält das Skelettprojekt, das wir generiert haben, um sicherzustellen, dass alles korrekt installiert wurde.

Da dies nur ein Test war, benötigen wir dieses Verzeichnis nicht. Stattdessen erstellen wir ein neues Verzeichnis für unsere Blog-App. Nennen Sie das Verzeichnis etwas, das für die App, die Sie erstellen, von Bedeutung ist. Als Beispiel nennen wir unseremy_blog_app.

mkdir my_blog_app

Navigieren Sie nun zum neu erstellten Verzeichnis:

cd my_blog_app

Erstellen und aktivieren Sie dann Ihre virtuelle Python-Umgebung.

python3 -m venv env
. env/bin/activate

Installieren Sie nun Django:

pip install django

Im Verzeichnismy_blog_app generieren wir ein Projekt, indem wir den folgenden Befehl ausführen:

django-admin startproject blog

Stellen Sie sicher, dass es funktioniert hat, indem Sie zum Verzeichnisblog/navigieren:

cd blog

Das Verzeichnisblog/ sollte im aktuellen Verzeichnis~/my_blog_app/ erstellt worden sein, nachdem der vorherige Befehldjango-admin ausgeführt wurde.

Führen Siels aus, um zu überprüfen, ob die erforderlichen Elemente erstellt wurden. Es sollte einblog-Verzeichnis und einemanage.py-Datei geben:

Outputblog manage.py

Nachdem Sie ein Projektverzeichnis erstellt haben, das den ersten Start Ihrer Blog-Anwendung enthält, können Sie mit dem nächsten Schritt fortfahren.

[[Schritt-2 -—- Einstellungen bearbeiten]] == Schritt 2 - Einstellungen bearbeiten

Da wir das Skelettprojekt generiert haben, haben wir jetzt einesettings.py-Datei.

Damit unser Blog die richtige Zeit für unseren Bereich hat, bearbeiten wir diesettings.py-Datei so, dass sie Ihre aktuelle Zeitzone verwendet. Sie können dieselist of time zones als Referenz verwenden. In unserem Beispiel verwenden wir die Zeit vonAmerica/New_York.

Navigieren Sie nun zu dem Verzeichnis, in dem sich die Dateisettings.pybefindet:

cd ~/my_blog_app/blog/blog/

Öffnen und bearbeiten Sie dann mit Nano oder einem Texteditor Ihrer Wahl die Dateisettings.py:

nano settings.py

Wir bearbeiten das FeldTIME_ZONE. Navigieren Sie also zum unteren Abschnitt der Datei, der folgendermaßen aussieht:

settings.py

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

Wir werden die ZeileTIME_ZONEo ändern, dass sie auf Ihre aktuelle Zeitzone eingestellt ist. In diesem Beispiel wird die Zeitzone für New York verwendet:

settings.py

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

Lassen Sie die Datei geöffnet, da wir einen Pfad für unsere statischen Dateien hinzufügen müssen. Die Dateien, die von Ihrer Django-Webanwendung bereitgestellt werden, werden alsstatic files bezeichnet. Dies kann alle erforderlichen Dateien zum Rendern der gesamten Webseite enthalten, einschließlich JavaScript, CSS und Bildern.

Gehen Sie zum Ende der Dateisettings.py und fügen SieSTATIC_ROOT wie unten gezeigt hinzu:

settings.py

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Nachdem wir die Zeitzone und den Pfad für statische Dateien hinzugefügt haben, sollten wir als Nächstes unsere IP-Adresse zur Liste der zulässigen Hosts hinzufügen. Navigieren Sie zu der Zeile in der Dateisettings.py, in derALLOWED_HOSTS steht. Sie befindet sich oben in der Dateisettings.py.

settings.py

...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['your server IP address']

# Application definition
...

Fügen Sie die IP-Adresse Ihres Servers in eckige Klammern und einfache Anführungszeichen ein.

Wenn Sie mit den vorgenommenen Änderungen zufrieden sind, speichern Sie die Datei, indem SieCTRL +X und danny drücken, um die Änderungen zu bestätigen.

Gut, Sie haben die Dateisettings.pyerfolgreich so bearbeitet, dass die richtige Zeitzone konfiguriert wurde. Sie haben auch den Pfad für Ihre statischen Dateien hinzugefügt undip address alsALLOWED_HOST für Ihre Anwendung festgelegt.

An diesem Punkt können wir mit dem Einrichten unserer Datenbankverbindung fortfahren.

[[Schritt 3 - Installieren des MySQL-Datenbank-Connectors]] == Schritt 3 - Installieren des MySQL-Datenbank-Connectors

Um MySQL in unserem Projekt verwenden zu können, benötigen wir eine Python 3-Datenbank-Connector-Bibliothek, die mit Django kompatibel ist. Also werden wir den Datenbank-Connectormysqlclient installieren, der eine gegabelte Version vonMySQLdb ist.

Laut der Dokumentation vonmysqlclientist „MySQLdb eine Thread-kompatible Schnittstelle zum beliebten Datenbankserver vonMySQL, der die Python-Datenbank-API bereitstellt.“ Der Hauptunterschied besteht darin, dassmysqlclient den zusätzlichen Vorteil hat, Python 3-Unterstützung einzuschließen.

Als erstes müssen wirpython3-dev installieren. Sie könnenpython3-dev installieren, indem Sie den folgenden Befehl ausführen:

sudo apt-get install python3-dev

Sobaldpython3-dev installiert ist, können wir die erforderlichen Python- und MySQL-Entwicklungsheader und -Bibliotheken installieren:

sudo apt-get install python3-dev libmysqlclient-dev

Wenn Sie die folgende Ausgabe sehen:

OutputAfter this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Geben Siey ein und drücken Sie dannENTER, um fortzufahren.

Dann werden wirpip3 verwenden, um diemysqlclient-Bibliothek vonPyPi zu installieren. Da unsere Version vonpip aufpip3 zeigt, können wir nurpip verwenden.

pip install mysqlclient

Sie werden eine Ausgabe ähnlich der folgenden sehen, die überprüft, ob die Installation korrekt ist:

successfully installed mysqlclientCollecting mysqlclient
  Downloading mysqlclient-1.3.12.tar.gz (82kB)
    100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
  Running setup.py bdist_wheel for mysqlclient ... done
  Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.12

Installieren Sie nun den Server vonMySQLmit dem folgenden Befehl:

sudo apt-get install mysql-server

Wir haben jetzt erfolgreich den MySQL-Server und den MySQL-Client mithilfe der Connector-Bibliothek von PyPimysqlclientinstalliert.

[[Schritt-4 - Erstellen der Datenbank]] == Schritt 4 - Erstellen der Datenbank

Nachdem das Grundgerüst Ihrer Django-Anwendung eingerichtet undmysqlclient undmysql-server installiert wurden, müssen Sie Ihr Django-Backend für die MySQL-Kompatibilität konfigurieren.

Stellen Sie sicher, dass der MySQL-Dienst ausgeführt wird:

systemctl status mysql.service

Sie sehen eine Ausgabe, die ungefähr so ​​aussieht:

mysql.service active● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-12-29 11:59:33 UTC; 1min 44s ago
 Main PID: 26525 (mysqld)
   CGroup: /system.slice/mysql.service
        └─26525 /usr/sbin/mysqld

Dec 29 11:59:32 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Starting MySQL Community Server...
Dec 29 11:59:33 ubuntu-512mb-nyc3-create-app-and-mysql systemd[1]: Started MySQL Community Server.

Wenn Sie stattdessen eine Ausgabe ähnlich der folgenden sehen:

mysql.service inactive● mysqld.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Sie könnensudo systemctl start mysql ausführen, ummysql.service erneut zu starten.

Mit dem folgenden Befehl können Sie sich jetzt mit Ihren MySQL-Anmeldeinformationen anmelden. Dabei ist-u das Flag zum Deklarieren Ihres Benutzernamens und-p das Flag, das MySQL mitteilt, dass dieser Benutzer ein Kennwort benötigt:

mysql -u db_user -p

Dann sehen Sie eine Ausgabe, in der Sie nach dem Kennwort fürdb_user’sgefragt werden:

OutputEnter password:

Sobald Sie Ihr Passwort korrekt eingegeben haben, wird folgende Ausgabe angezeigt:

OutputWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Mit dem folgenden Befehl können wir uns von MySQL die aktuellen Datenbanken anzeigen lassen:

SHOW DATABASES;

Es wird eine Ausgabe ähnlich der folgenden angezeigt, vorausgesetzt, Sie haben noch keine Datenbanken erstellt:

Output+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
4 rows in set (0.00 sec)

[.note] #Note: Wenn beim Verbindungsversuch eine Fehlermeldung angezeigt wird, überprüfen Sie, ob Ihr Kennwort korrekt ist und ob Sie MySQL ordnungsgemäß installiert haben. Andernfalls wiederholen Sie dietutorial on how to install and configure MySQL.
#

Standardmäßig sind bereits 4 Datenbanken erstellt:information_schema,MySQL,performance_schema undsys. Wir müssen diese nicht berühren, da sie Informationen enthalten, die für den MySQL-Server selbst wichtig sind.

Nachdem Sie sich erfolgreich bei Ihrem MySQL-Server angemeldet haben, erstellen wir die ursprüngliche Datenbank, in der die Daten für unser Blog gespeichert sind.

Führen Sie den folgenden Befehl aus, um eine Datenbank in MySQL zu erstellen, und verwenden Sie dabei einen aussagekräftigen Namen für Ihre Datenbank:

CREATE DATABASE blog_data;

Nach erfolgreicher Erstellung der Datenbank wird die folgende Ausgabe angezeigt:

OutputQuery OK, 1 row affected (0.00 sec)

[.Hinweis]##

Note: Wenn Sie die folgende Ausgabe sehen:

database creation failedERROR 1007 (HY000): Can't create database blog_data; database exists

Dann existiert, wie der Fehler besagt, bereits eine Datenbank mit dem Namenblog_data.

Wenn der folgende MySQL-Fehler angezeigt wird, liegt ein MySQL-Syntaxfehler vor. Stellen Sie sicher, dass Sie den Befehl genau wie in diesem Lernprogramm angegeben eingegeben haben.

database creation failedERROR 1064 (42000): You have an error in your SQL syntax;

Stellen Sie als Nächstes sicher, dass die Datenbank jetzt in Ihrer Liste der verfügbaren Datenbanken aufgeführt ist:

SHOW DATABASES;

Sie sollten sehen, dass die Datenbankblog_datazu den in der Ausgabe enthaltenen Datenbanken gehört:

output+--------------------+
| Database          |
+--------------------+
| information_schema |
| blog_data         |
| mysql                 |
| performance_schema |
| sys               |
+--------------------+
5 rows in set (0.00 sec)

Sie haben erfolgreich eine MySQL-Datenbank für Ihr Blog erstellt.

Wenn Sie den MySQL-Server beenden möchten, drücken SieCTRL +D.

[[Schritt-5 - Hinzufügen der MySQL-Datenbankverbindung zu Ihrer Anwendung]] == Schritt 5 - Fügen Sie der Anwendung die MySQL-Datenbankverbindung hinzu

Zuletzt werden wir die Anmeldeinformationen für die Datenbankverbindung zu Ihrer Django-Anwendung hinzufügen.

[.note] #Note: Es ist wichtig zu beachten, dass die Verbindungseinstellungen gemäß der Django-Dokumentation in der folgenden Reihenfolge verwendet werden:
-OPTIONS
-NAME,USER,PASSWORD,HOST,PORT
-MySQL option files.
#

Nehmen Sie die erforderlichen Änderungen vor, um Ihre Django-Blog-App mit MySQL zu verbinden.

Navigieren Sie zur Dateisettings.py und ersetzen Sie die aktuellen ZeilenDATABASESdurch die folgenden. Wir werden Ihr Datenbankwörterbuch so konfigurieren, dass es MySQL als Ihr Datenbank-Backend verwendet und aus welcher Datei Ihre Datenbankverbindungsdaten gelesen werden:

settings.py

...
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/mysql/my.cnf',
        },
    }
}
...

Als Nächstes bearbeiten wir die Konfigurationsdatei so, dass sie Ihre MySQL-Anmeldeinformationen enthält. Verwenden Sie nano alssudo, um die Datei zu bearbeiten und die folgenden Informationen hinzuzufügen:

sudo nano /etc/mysql/my.cnf

my.cnf

...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

Wenn der Datenbankname in unserem Fallblog_data ist, ist Ihr Benutzername für den MySQL-Server der von Ihnen erstellte und das Kennwort das von Ihnen erstellte MySQL-Server-Kennwort. Außerdem werden Sie feststellen, dassutf8 als Standardcodierung festgelegt ist. Dies ist eine übliche Methode zum Codieren von Unicode-Daten in MySQL.

Nachdem die Datei bearbeitet wurde, müssen wir MySQL neu starten, damit die Änderungen wirksam werden.

systemctl daemon-reload
systemctl restart mysql

Bitte beachten Sie, dass der Neustart von MySQL einige Sekunden dauert. Seien Sie also bitte geduldig.

[[Schritt 6 - Test-MySQL-Verbindung zur Anwendung]] == Schritt 6 - Testen der MySQL-Verbindung zur Anwendung

Wir müssen überprüfen, ob die Konfigurationen in Django Ihren MySQL-Server richtig erkennen. Wir können dies tun, indem wir einfach den Server laufen lassen. Wenn dies fehlschlägt, funktioniert die Verbindung nicht ordnungsgemäß. Ansonsten ist die Verbindung gültig.

Wir müssen zu folgendem Verzeichnis navigieren:

cd ~/my_blog_app/blog/

Von dort aus können wir den folgenden Befehl ausführen:

python manage.py runserver your-server-ip:8000

Sie sehen nun eine Ausgabe ähnlich der folgenden:

OutputPerforming system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 4, 2018 - 15:45:39
Django version 2.0.1, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.

[.note] #Note: Sie werden sehen, dass Sie nicht angewendete Migrationen in der Ausgabe haben. Aber keine Sorge, dies wird in den kommenden Tutorials behandelt. Dies hat keine Auswirkungen auf die Ersteinrichtung unserer Anwendung. Bitte fahren Sie fort.
#

Befolgen Sie die Anweisungen in der Ausgabe und folgen Sie dem vorgeschlagenen Linkhttp://your-server-ip:8000/, um Ihre Webanwendung anzuzeigen und zu überprüfen, ob sie ordnungsgemäß funktioniert.

Django Default Page

Wenn Ihre Seite dem obigen Screenshot ähnelt, funktioniert Ihre Django-Anwendung wie erwartet!

Wenn Sie mit dem Testen Ihrer App fertig sind, können SieCTRL +C drücken, um den Befehlrunserver zu stoppen. Dadurch kehren Sie zu Ihrer Programmierumgebung zurück.

Wenn Sie bereit sind, Ihre Python-Umgebung zu verlassen, können Sie den Befehldeactivateausführen:

deactivate

Wenn Sie Ihre Programmierumgebung deaktivieren, kehren Sie zur Eingabeaufforderung des Terminals zurück.

Fazit

In diesem Tutorial haben Sie die erste Grundlage für Ihr Django-Blog erstellt. Sie haben MySQL installiert, konfiguriert und mit dem Django-Backend verbunden. Sie haben dersettings.py-Datei Ihrer Anwendung auch einige wichtige Informationen hinzugefügt, z. B.TIME_ZONE undALLOWED_HOSTS.

Nachdem diese grundlegenden Einstellungen und Konfigurationen abgeschlossen sind, können Sie nun Modelle entwickeln und Migrationen in Ihrer Django-Anwendung anwenden.