Comment créer une application Django et la connecter à une base de données

introduction

Un framework Web gratuit et à code source ouvert écrit en Python, Django permet une évolutivité, une réutilisation et un développement rapides.

Dans ce tutoriel, vous apprendrez à configurer la fondation initiale d'un site Web de blog avec des connexions à une base de données MySQL. Cela impliquera la création de la structure squelette de l'application Web du blog à l'aide dedjango-admin, la création de la base de données MySQL et la connexion de l'application Web à la base de données.

Conditions préalables

Ce didacticiel est le deuxième didacticiel de la sérieDjango Development. Pour suivre ce tutoriel, vous devez compléter les éléments suivants:

  • Installez le logiciel nécessaire pour utiliser Django sur un serveur Ubuntu 16.04. Si vous n'avez pas configuré de serveur avec les privilèges sudo ou n'avez pas encore installé Django, vous pouvez suivre le premier tutoriel de cette série, à l'adresse «https://www.digitalocean.com/community/tutorials/how-to-install -django-and-set-up-a-development-environment-on-ubuntu-16-04 [Comment installer Django et configurer un environnement de développement sur Ubuntu 16.04]. ”

  • Installez MySQL avant de suivre ce didacticiel. Si vous ne l’avez pas déjà installé, vous pouvez suivrestep 2 of “How To Install the Latest MySQL on Ubuntu 16.04”, qui inclut les commandes pour installer MySQL.

Avec les conditions préalables installées et notre environnement de développement Django mis en place, nous pouvons passer à la création de notre application.

[[step-1 -—- create-the-initial-django-project-skeleton]] == Étape 1 - Créer le squelette initial du projet Django

Afin de jeter les bases de notre application, nous devons générer le squelette du projet à l'aide de la commandedjango-admin. Ce projet généré sera la base de notre application de blog.

La première chose à faire est de naviguer dans le répertoire de base, ce que nous pouvons faire avec la commande suivante:

cd ~

Ensuite, nous pouvons lister le contenu de notre répertoire actuel:

ls

Si vous avez commencé à partir de zéro avec le début de cette série, vous remarquerez qu’il existe un répertoire:

Outputdjango-apps

Cela contient le projet squelette que nous avons généré pour vérifier que tout a été installé correctement.

Comme ce n’était qu’un test, nous n’avons pas besoin de ce répertoire. Au lieu de cela, nous allons créer un nouveau répertoire pour notre application de blog. Appelez le répertoire quelque chose de significatif pour l'application que vous créez. Par exemple, nous appellerons les nôtresmy_blog_app.

mkdir my_blog_app

Maintenant, accédez au répertoire nouvellement créé:

cd my_blog_app

Ensuite, créez et activez votre environnement virtuel Python.

python3 -m venv env
. env/bin/activate

Maintenant, installez Django:

pip install django

Dans le répertoiremy_blog_app, nous allons générer un projet en exécutant la commande suivante:

django-admin startproject blog

Vérifiez que cela a fonctionné en accédant au répertoireblog/:

cd blog

Le répertoireblog/ doit avoir été créé dans le répertoire courant,~/my_blog_app/, après avoir exécuté la commandedjango-admin précédente.

Exécutezls pour vérifier que les éléments nécessaires ont été créés. Il doit y avoir un répertoireblog et un fichiermanage.py:

Outputblog manage.py

Maintenant que vous avez créé un répertoire de projet contenant le démarrage initial de votre application de blog, nous pouvons passer à l'étape suivante.

[[step-2 -—- edit-settings]] == Étape 2 - Modifier les paramètres

Depuis que nous avons généré le projet squelette, nous avons maintenant un fichiersettings.py.

Pour que notre blog ait l'heure correcte associée à notre zone, nous éditerons le fichiersettings.py afin qu'il utilise votre fuseau horaire actuel. Vous pouvez utiliser celist of time zones comme référence. Pour notre exemple, nous utiliserons le temps deAmerica/New_York.

Naviguez maintenant vers le répertoire où se trouve le fichiersettings.py:

cd ~/my_blog_app/blog/blog/

Ensuite, à l'aide de nano ou d'un éditeur de texte de votre choix, ouvrez et éditez le fichiersettings.py:

nano settings.py

Nous éditons le champTIME_ZONE, naviguez donc jusqu'à la section inférieure du fichier qui ressemble à ceci:

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
...

Nous allons modifier la ligneTIME_ZONE afin qu'elle soit définie sur votre fuseau horaire actuel. Nous allons utiliser le fuseau horaire de New York dans cet exemple:

settings.py

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

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

Laissons le fichier ouvert car nous devons ajouter un chemin pour nos fichiers statiques. Les fichiers qui sont servis à partir de votre application Web Django sont appelésstatic files. Cela peut inclure tous les fichiers nécessaires au rendu de la page Web complète, y compris JavaScript, CSS et les images.

Allez à la fin du fichiersettings.py et ajoutezSTATIC_ROOT comme indiqué ci-dessous:

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')

Maintenant que nous avons ajouté le fuseau horaire et le chemin des fichiers statiques, nous devrions ensuite ajouter notre adresse IP à la liste des hôtes autorisés. Accédez à la ligne du fichiersettings.py où il est indiquéALLOWED_HOSTS, ce sera vers le haut du fichiersettings.py.

settings.py

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

ALLOWED_HOSTS = ['your server IP address']

# Application definition
...

Ajoutez l’adresse IP de votre serveur entre les crochets et les guillemets simples.

Une fois que vous êtes satisfait des modifications apportées, enregistrez le fichier en appuyant surCTRL +X, puis sury pour confirmer les modifications.

Super, vous avez réussi à modifier votre fichiersettings.py afin que le fuseau horaire approprié ait été configuré. Vous avez également ajouté le chemin d'accès à vos fichiers statiques et défini vosip address en tant queALLOWED_HOST pour votre application.

Nous pouvons maintenant configurer notre connexion à la base de données.

[[step-3 -—- install-mysql-database-connector]] == Étape 3 - Installer MySQL Database Connector

Pour utiliser MySQL avec notre projet, nous aurons besoin d’une bibliothèque de connecteurs de base de données Python 3 compatible avec Django. Nous allons donc installer le connecteur de base de données,mysqlclient, qui est une version fourchue deMySQLdb.

Selon la documentation demysqlclient, «MySQLdb est une interface compatible avec les threads avec le serveur de base de données populaireMySQL qui fournit l'API de base de données Python.» La principale différence est quemysqlclient a l'avantage supplémentaire d'inclure la prise en charge de Python 3.

La première chose à faire est d'installerpython3-dev. Vous pouvez installerpython3-dev en exécutant la commande suivante:

sudo apt-get install python3-dev

Une fois quepython3-dev est installé, nous pouvons installer les en-têtes et bibliothèques de développement Python et MySQL nécessaires:

sudo apt-get install python3-dev libmysqlclient-dev

Lorsque vous voyez la sortie suivante:

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

Entrezy puis appuyez surENTER pour continuer.

Ensuite, nous utiliseronspip3 pour installer la bibliothèquemysqlclient à partir dePyPi. Puisque notre version depip pointe verspip3, nous pouvons simplement utiliserpip.

pip install mysqlclient

Vous verrez une sortie similaire à celle-ci, en vérifiant qu'elle est correctement installée:

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

Maintenant, installez le serveurMySQL, avec la commande suivante:

sudo apt-get install mysql-server

Nous avons maintenant installé avec succès le serveur MySQL et le client MySQL à l'aide de la bibliothèque de connecteurs PyPimysqlclient.

[[step-4 -—- create-the-database]] == Étape 4 - Créer la base de données

Maintenant que le squelette de votre application Django a été configuré et quemysqlclient etmysql-server ont été installés, nous devrons configurer votre backend Django pour la compatibilité MySQL.

Vérifiez que le service MySQL est en cours d'exécution:

systemctl status mysql.service

Vous verrez une sortie qui ressemble à ceci:

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.

Si vous voyez plutôt une sortie similaire à celle-ci:

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

Vous pouvez exécutersudo systemctl start mysql pour redémarrermysql.service.

Vous pouvez maintenant vous connecter avec vos identifiants MySQL en utilisant la commande suivante. Où-u est l'indicateur pour déclarer votre nom d'utilisateur et-p est l'indicateur qui indique à MySQL que cet utilisateur a besoin d'un mot de passe:

mysql -u db_user -p

Ensuite, vous verrez la sortie qui vous demande ce mot de passedb_user’s:

OutputEnter password:

Une fois que vous avez entré votre mot de passe correctement, vous verrez la sortie suivante:

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.

Nous pouvons demander à MySQL de nous montrer les bases de données actuelles avec la commande suivante:

SHOW DATABASES;

Vous verrez une sortie similaire à la suivante, en supposant que vous n’ayez encore créé aucune base de données:

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

[.note] #Note: Si vous obtenez une erreur lors de la tentative de connexion, vérifiez que votre mot de passe est correct et que vous avez correctement installé MySQL. Sinon, revisitez lestutorial on how to install and configure MySQL.
#

Par défaut, vous aurez 4 bases de données déjà créées,information_schema,MySQL,performance_schema etsys. Nous n’aurons pas besoin de les aborder car elles contiennent des informations importantes pour le serveur MySQL lui-même.

Maintenant que vous êtes connecté avec succès à votre serveur MySQL, nous allons créer la base de données initiale qui contiendra les données de notre blog.

Pour créer une base de données dans MySQL, exécutez la commande suivante en utilisant un nom explicite pour votre base de données:

CREATE DATABASE blog_data;

Une fois la création de la base de données réussie, vous verrez le résultat suivant:

OutputQuery OK, 1 row affected (0.00 sec)

[.Remarque]##

Note: Si vous voyez la sortie suivante:

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

Ensuite, comme l'indique l'erreur, une base de données du nomblog_data existe déjà.

Et si vous voyez l'erreur MySQL suivante, cela signifie qu'il y a une erreur de syntaxe MySQL. Vérifiez que vous avez entré la commande exactement comme indiqué dans ce didacticiel.

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

Ensuite, vérifiez que la base de données est maintenant répertoriée dans votre liste de bases de données disponibles:

SHOW DATABASES;

Vous devriez voir que la base de donnéesblog_data fait partie des bases de données incluses dans la sortie:

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

Vous avez créé avec succès une base de données MySQL pour votre blog.

Chaque fois que vous souhaitez quitter le serveur MySQL, appuyez surCTRL +D.

[[step-5 -—- add-the-mysql-database-connection-to-your-application]] == Étape 5 - Ajouter la connexion à la base de données MySQL à votre application

Enfin, nous ajouterons les informations d'identification de connexion à la base de données à votre application Django.

[.note] #Note: Il est important de se rappeler que les paramètres de connexion, selon la documentation Django, sont utilisés dans l'ordre suivant:
-OPTIONS
-NAME,USER,PASSWORD,HOST,PORT
-MySQL option files.
#

Apportons les modifications nécessaires pour connecter votre application de blog Django à MySQL.

Accédez au fichiersettings.py et remplacez les lignesDATABASES actuelles par les suivantes. Nous allons configurer votre dictionnaire de base de données pour qu'il sache utiliser MySQL comme base de base de données et dans quel fichier lire vos informations d'identification de connexion à la base de données:

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',
        },
    }
}
...

Ensuite, modifions le fichier de configuration afin qu’il dispose de vos informations d’identité MySQL. Utilisez nano commesudo pour éditer le fichier et ajouter les informations suivantes:

sudo nano /etc/mysql/my.cnf

my.cnf

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

Lorsque le nom de la base de données dans notre cas estblog_data, votre nom d'utilisateur pour le serveur MySQL est celui que vous avez créé et le mot de passe est le mot de passe du serveur MySQL que vous avez créé. En outre, vous remarquerez queutf8 est défini comme encodage par défaut, c'est un moyen courant d'encoder des données Unicode dans MySQL.

Une fois le fichier édité, nous devons redémarrer MySQL pour que les modifications prennent effet.

systemctl daemon-reload
systemctl restart mysql

Veuillez noter que le redémarrage de MySQL prend quelques secondes, soyez donc patient.

[[step-6 -—- test-mysql-connection-to-application]] == Étape 6 - Tester la connexion MySQL à l'application

Nous devons vérifier que les configurations dans Django détectent correctement votre serveur MySQL. Nous pouvons le faire en exécutant simplement le serveur. Si cela échoue, cela signifie que la connexion ne fonctionne pas correctement. Sinon, la connexion est valide.

Nous devrons accéder au répertoire suivant:

cd ~/my_blog_app/blog/

À partir de là, nous pouvons exécuter la commande suivante:

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

Vous verrez maintenant une sortie similaire à celle-ci:

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: Vous verrez que vous avez des migrations non appliquées dans la sortie. Mais ne vous inquiétez pas, cela sera abordé dans les prochains tutoriels. Cela n'affecte pas la configuration initiale de notre application. Veuillez continuer.
#

Suivez les instructions de la sortie et suivez le lien suggéré,http://your-server-ip:8000/, pour afficher votre application Web et vérifier qu'elle fonctionne correctement.

Django Default Page

Si votre page est similaire à la capture d'écran ci-dessus, votre application Django fonctionne comme prévu!

Lorsque vous avez terminé de tester votre application, vous pouvez appuyer surCTRL +C pour arrêter la commanderunserver. Cela vous ramènera à votre environnement de programmation.

Lorsque vous êtes prêt à quitter votre environnement Python, vous pouvez exécuter la commandedeactivate:

deactivate

La désactivation de votre environnement de programmation vous ramènera à l'invite de commande du terminal.

Conclusion

Dans ce tutoriel, vous avez créé la fondation initiale de votre blog Django. Vous avez installé, configuré et connecté MySQL au backend Django. Vous avez également ajouté des informations importantes au fichiersettings.py de votre application, telles queTIME_ZONE etALLOWED_HOSTS.

Maintenant que ces paramètres et configurations de base sont terminés, vous pouvez maintenant commencer à développer des modèles et à appliquer des migrations dans votre application Django.