[PYTHON] Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 4] ~ Construction MySQL et migration de base de données avec Docker ~

<< Partie 3 | Partie 5 >>

Créer un conteneur MySQL avec Docker

Créez un dossier docker directement sous le projet et créez un dossier db_data (peut avoir un nom différent) et docker-compose.yml directement en dessous.

concentratio #Répertoire racine du projet
├── config 
│   └── ...
│   
├── docker 
│   ├── db_data #Pour la persistance des données
│   └── docker-compose.yml
└── ...

docker/docker-compose.yml


version: '2'
services:
  db:
    image: mariadb:latest
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    environment:
      - MYSQL_ROOT_USER=root
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=concentratio
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user
    volumes:
      - db_data:/var/lib/mysql # db_Si vous avez modifié le nom du dossier de données, réécrivez-le avec le nom de dossier modifié.
      - ./db_data:/docker-entrypoint-initdb.d # db_Si vous avez modifié le nom du dossier de données, réécrivez-le avec le nom de dossier modifié.
      - ./db_data:/etc/mysql/conf.d # db_Si vous avez modifié le nom du dossier de données, réécrivez-le avec le nom de dossier modifié.
    ports:
      - '3333:3306'

volumes:
  db_data:
    driver: local

Puisque le dossier db_data est monté dans /docker-entrypoint-initdb.d, si vous placez un fichier SQL arbitraire dans le dossier db_data, ce sera au démarrage du conteneur (première fois?). Il exécutera le fichier SQL. </ font>

démarrer le conteneur Docker

Utilisez la commande cd pour aller dans le répertoire docker, puis utilisez docker-compose up -d pour démarrer le conteneur MySQL.

docker$ docker-compose up -d
Creating docker_db_1 ... done

Au fait L'arrêt est docker-compose stop (oul'ID ou le nom du conteneur de docker stop) Supprimer estdocker-copose down -v (ou ID de conteneur ou nom de conteneur de docker rm`)

Vérifiez si le conteneur MySQL est en cours d'exécution

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
03dd318a2ad7        mariadb:latest      "docker-entrypoint.s…"   29 seconds ago      Up 29 seconds       0.0.0.0:3333->3306/tcp   docker_db_1

Essayez de vous connecter avec MySQL Workbench

image.png

image.png Il semble que j'ai pu me connecter

Migration de base de données

Installez mysqlclient et django-environ avec pip

pip3 install django-environ mysqlclient

Créer un fichier .env

concentratio #Répertoire racine du projet
├── config 
│   └── ...
│   
├── docker 
│   └── ...
│
├──.env
│
└── ...

.env.default


DEBUG=True
DATABASE_URL=mysql://user:[email protected]:3333/concentratio

Modifier settings.py

config/settings.py


.
..
...
import environ #ajouter à(django-Importer environ)
.
..
...
#ajouter à
ENV_FILE = os.path.join(BASE_DIR, '.env') # .chemin du fichier env
ENV = environ.Env()
ENV.read_env(ENV_FILE) # django-dans environ.Lire le fichier env
...
..
.
#ajouter à
DATABASES = {
    'default': ENV.db()
}
DATABASES['default']['ATOMIC_REQUESTS'] = True # ATOMIC_Lorsque REQUESTS est défini sur True, la vue entière devient une transaction (si une exception se produit pendant le traitement de la vue, l'opération DB précédente est annulée).
...
..
.

Migration de base de données

python3 manage.py makemigrations
python3 manage.py migrate

La commande migrate est correcte tant que divers OK sont donnés.

$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Vérifiez à nouveau avec MySQL Workbench

La table de gestion de django a été créée. La migration de la base de données est terminée. image.png

Créer un super utilisateur

Vous pouvez créer un superutilisateur avec python3 manage.py createuperuser.

$ python3 manage.py createsuperuser
Username : admin #Définir correctement (cette fois, administrateur)
Email address: [email protected] #Définir correctement (admin cette [email protected])
Password: #Définir correctement (cette fois, administrateur)
Password (again): #Définir correctement (cette fois, administrateur)
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y #Je reçois un avertissement indiquant que le mot de passe est facile, mais peu importe si c'est "y"
Superuser created successfully.

image.png

L'utilisateur a été créé. c'est tout.

<< Partie 3

Recommended Posts

Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 4] ~ Construction MySQL et migration de base de données avec Docker ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 3] ~ Implémentation de la faiblesse nerveuse ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 6] ~ Authentification utilisateur 2 ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 5] ~ Authentification des utilisateurs ~
Créons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 2] ~ Configuration de Vue ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 1] ~ Django setup ~
Essayez de créer une application Web avec Vue.js et Django (édition Mac) - (1) Construction d'environnement, création d'application
Essayez de créer un code de "décryptage" en Python
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Essayez de créer un groupe de dièdre avec Python
Faisons un outil de veille de commande avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Comment faire un jeu de tir avec toio (partie 1)
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
[Introduction à Tensorflow] Comprendre correctement Tensorflow et essayer de créer un modèle
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 2
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Essayez de créer un type de service Web avec un langage de balisage 3D
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Déployer l'application Django avec Docker
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Construction facile]
Essayez de créer un logiciel de capture aussi précis que possible avec python (2)
Essayez de créer foldl et foldr avec Python: lambda. Aussi mesure du temps
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
Je souhaite créer une application Web en utilisant React et Python flask