Tutoriel Python Django (1)

Ceci est un matériel pour les sessions d'étude. J'expliquerai en suivant le tutoriel de django1.8. https://docs.djangoproject.com/en/1.8/intro/tutorial01/

La version 1.4 étant la dernière version du document officiel japonais, il existe quelques différences, mais le flux général est le même, c'est donc une bonne idée de le lire. http://django-docs-ja.readthedocs.org/en/latest/intro/tutorial01.html

Dans l'explication du site officiel, le nom du projet est mysite, Nous allons le créer en tant que projet tutoriel.

Addendum (2015/11/18): Tutorial Tutorial a été créé. → Résumé du didacticiel

environnement

OS:Mac OSX10.11 python:3.4.2 django:1.8.5

Code source

Mettez le code source du tutoriel sur github. Veuillez vous y référer car nous marquerons les points importants et nous engagerons aussi finement que possible. https://github.com/usa-mimi/tutorial

organisation des fichiers

Nous allons procéder avec cette structure de fichiers.

tutorial/  #Répertoire créé lors du clonage avec git
    ├ .git/
    ├ .gitignore
    ├ ...
    └ tutorial/  #L'explication sera expliquée ici en tant que root, sauf indication contraire.
          ├ manage.py  #Spécifiez lors de l'exécution de la commande django
          ├ ...
          └ tutorial/
                ├ ...
                ├ urls.py  #URL du projet
                └ settings.py  #fichier de configuration du projet

Le répertoire principal du didacticiel est ciblé pour git. Ceci est fait pour mettre des fichiers qui ne sont pas liés à django lui-même, tels que README pour git et les paramètres de déploiement.

Dans ce répertoire (tutorial) $ django-admin startproject tutorial Lorsque vous exécutez cette commande Les fichiers et répertoires sous tutoriel / tutoriel sont générés automatiquement.

L'état où la balise project_start est attachée avec git est l'état immédiatement après l'exécution de la commande ci-dessus.

À partir de là, sauf indication contraire, l'explication sera basée sur tutorial / tutorial </ b>.

Description du fichier créé automatiquement

https://docs.djangoproject.com/en/1.8/intro/tutorial01/#creating-a-project

./manage.py Ce fichier est spécifié lors de l'exécution de diverses opérations sur la ligne de commande. Lors du démarrage d'un serveur, de la migration d'une base de données ou de l'exécution d'une commande personnalisée, transmettez la commande à ce fichier et exécutez-la.

$ python manage.py runserver $ python manage.py migrate C'est comme ça.

Puisque manage.py a l'autorisation d'exécution Vous pouvez également écrire $. / Manage.py au lieu de $ python manage.py.

Si aucun argument n'est passé, une liste de commandes pouvant être exécutées s'affiche. Si vous souhaitez en savoir plus, veuillez vous référer au site officiel. https://docs.djangoproject.com/en/1.8/ref/django-admin/

Si vous l'exécutez et obtenez la sortie suivante, django n'est pas installé. Créez un environnement virtuel et installez django, ou utilisez la commande workon pour entrer dans l'environnement virtuel.

$ ./manage.py
Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

tutorial/settings.py Il s'agit du fichier de configuration du projet. Applications et middleware à activer, Définissez divers paramètres tels que les paramètres de connexion à la base de données et divers répertoires.

Si vous souhaitez connaître les éléments de réglage en détail, veuillez vous référer au site officiel. https://docs.djangoproject.com/en/1.8/topics/settings/

tutorial/urls.py Il s'agit du paramètre URL du serveur. Regardez l'URL demandée et écrivez dans ce fichier quelle vue (décrite plus loin) renvoie la réponse. Il est spécifié comme ROOT_URLCONF dans settings.py.

Explication officielle → https://docs.djangoproject.com/en/1.8/topics/http/urls/

Créer une base de données

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#database-setup Source → balise project_start

Paramètres de la base de données

Suivons le tutoriel et créons ensuite une base de données. La base de données à utiliser est décrite dans le fichier de paramètres (tutorial / settings.py). Ouvrez le fichier de paramètres et regardez autour de la ligne 77.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Par défaut, sqlite3 est utilisé pour ce qui précède, dans le même répertoire que manage.py. Nous sommes censés utiliser un fichier DB nommé db.sqlite3. Dans le cas du moteur sqlite, NAME est le chemin d'accès au fichier sqlite. BASE_DIR pointe vers le répertoire où se trouve manage.py. ʻOs.path.join` est une fonction qui joint les chemins avec un séparateur selon le système.

Si vous souhaitez utiliser le serveur mysql ou postgresql, veuillez réécrire ce fichier comme suit.

#serveur mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
#serveur postgresql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Supplément: sqlite

sqlite est une base de données simple qui gère la base de données sous forme de fichier. Il est très approprié pour la création de prototypes car il n'est pas nécessaire de préparer un serveur et vous pouvez facilement supprimer la base de données simplement en supprimant le fichier. Cependant, l'accès est plus lent qu'un serveur de base de données normal et a tendance à causer des problèmes lors de l'accès en même temps. Utilisez mysql ou postgresql pour exécuter le programme terminé. Dans le cas de mac, il est installé par défaut, mais dans le cas de windows, il semble qu'il doive être installé manuellement.

Veuillez vous référer à l'URL du site de référence d'installation. http://www.dbonline.jp/sqliteinstall/install/index1.html

Création de base de données

Après avoir défini la base de données, créons la base de données (ajoutez une table). La commande pour créer une base de données est «migrate». $ ./manage.py migrate

Si vous utilisez mysql ou postgresql, vous devrez peut-être préparer une base de données vide à l'avance. Ne pensez à rien lorsque vous utilisez sqlite3. Lorsque vous exécutez la commande, un fichier est créé.

Si vous exécutez la commande sans toucher aux paramètres, un tableau sera créé pour enregistrer les informations utilisateur et les informations de session utilisées pour l'authentification.

$ ./manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: messages, staticfiles
  Apply all migrations: contenttypes, auth, sessions, admin
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... 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 sessions.0001_initial... OK

Supplément: syncdb

Jusqu'à django 1.6, la base de données était initialisée à l'aide de la commande syncdb. Lorsque cette commande est exécutée, la commande «migrate» et la commande «createuperuser» décrites ci-dessous sont exécutées. Ce sera un mouvement qui sera exécuté en continu. Depuis django1.8, la commande reste et peut être exécutée, mais elle est officiellement obsolète depuis django1.7.

Veuillez noter que la documentation japonaise est django 1.4 et est expliquée dans syncdb.

Confirmation de démarrage du serveur

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#the-development-server Source → balise project_start

Vérifier avec le navigateur

Le framework django a également une fonction serveur, il n'est donc pas nécessaire de préparer un serveur dédié pendant le développement. La commande à exécuter est runserver. Une fois exécuté, le serveur de développement commencera à utiliser le port 8000 par défaut. Dans cet état, vous pouvez vérifier l'opération en accédant à http: // localhost: 8000 / avec un navigateur.

$ ./manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
October 31, 2015 - 08:55:38
Django version 1.8.5, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/  #← Adresse au démarrage
Quit the server with CONTROL-C.
[31/Oct/2015 09:06:54] "GET / HTTP/1.1" 200 1767  #← S'affiche lors de l'accès avec un navigateur

Kobito.uICdzG.png L'écran par défaut s'affiche car rien n'a été créé.

Si vous souhaitez modifier le numéro de port Donnez le numéro de port comme argument, tel que «$ ./manage.py runserver 8080». Si vous souhaitez accéder à partir d'un PC sur le même LAN Si vous écrivez quelque chose comme $ ./manage.py runserver 0.0.0.0: 8000 Vous pourrez accéder à partir du même LAN. Vérifiez l'adresse IP de la machine avec des commandes telles que ʻipconfig et ʻifconfig.

Supplément: chargement automatique de runserver

Si vous modifiez le programme pendant l'exécution sur runserver, django redémarrera automatiquement. Vous n'avez pas besoin d'apporter le terminal qui exécute le serveur, de l'arrêter et de le démarrer. Cependant, si vous ajoutez un nouveau répertoire de modèles, il se peut qu'il ne soit pas chargé automatiquement, soyez donc prudent.

Ajouter une application

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#creating-models Source → balise start_project → balise ʻadd_app_4_database_migration`

Nous ajouterons enfin des applications. Le didacticiel explique comment créer un modèle à l'aide d'une application de vote appelée `sondages 'à titre d'exemple.

Avant cela, je vais vous expliquer le déroulement de l'utilisation de l'application avec django.

  1. Ajoutez une application avec $ ./manage.py startapp appname.

  2. Décrivez le modèle (table de base de données) utilisé dans l'application dans ʻappname / models.py`.

  3. Ajoutez l'application créée à project / settings.py

  4. Mise à jour de la base de données

  5. Décrivez l'affichage et le fonctionnement du modèle (ajout, édition, etc.) dans ʻappname / views.py`. Le html à utiliser est également préparé ici.

  6. Écrivez ʻappname / urls.py` et associez l'URL aux vues

  7. Lisez ʻappname / urls.py dans project / urls.py`.

1 à 4 sera fait dans ce tutoriel. 5 et les versions ultérieures seront expliquées dans le Tutoriel 3. (Le didacticiel 2 concerne "l'écran de gestion") La balise source est attachée au format ʻadd_app_x`.

1. Ajouter une application de sondages

Exécutez la commande startapp de manage.py. Un répertoire avec le nom de l'application et certains fichiers sera créé automatiquement.

$ ./manage.py startapp polls
$ tree polls
polls
├── __init__.py
├── admin.py  #Fichiers liés au site de gestion
├── migrations  #Il est généré automatiquement alors ne le touchez pas
│   └── __init__.py
├── models.py  #Fichier qui décrit les informations et les opérations de la table
├── tests.py  #Modifiez ce fichier si vous souhaitez écrire un test
└── views.py  #Ajouter des fonctions qui reçoivent des demandes et renvoient des réponses

Dans le Tutoriel 3, en plus de cela, forms.py,templates /, ʻurls.py` sont ajoutés manuellement.

2. Description du modèle

Réécrivons polls / models.py en suivant le tutoriel. Une classe créée en héritant de la classe models.Model est une classe qui représente une table DB. Les propriétés définies à l'aide de l'instance models. ~ Field représentent les colonnes de la table. Le nom de la propriété sera le nom de la colonne de la table telle quelle. Dans le didacticiel, la table «Question» et la table «Choix» sont définies.

polls/models.py



from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Supplément: Modèle

Bien que cela ne soit pas montré dans ce didacticiel, vous pouvez ajuster le comportement de la classe de différentes manières en définissant la classe Meta. Documents → https://docs.djangoproject.com/en/1.8/ref/models/options/

Vous pouvez spécifier l'ordre par défaut pour l'acquisition des données et changer le nom de la table créée.

Par défaut, une table de ʻappname_modelname` est créée. Dans l'exemple du didacticiel, une table de «polls_question» et de «polls_choice» est créée. Nous vous déconseillons de changer le nom de la table sauf si vous avez une raison spécifique.

D'autres paramètres utiles incluent le changement de nom sur la page d'administration décrite dans le didacticiel suivant. Définition de contraintes uniques pour plusieurs champs (par exemple, limitation par «date» et «élément»).

La méthode de description est la suivante

class Question(models.Model):
    class Meta:
        app_label = 'polls'
        verbose_name = 'Question'
        table_name = 'polls_question'

Supplément: terrain

Veuillez vous référer au document original pour connaître le type de champ disponible. Documents → https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types

L'équivalent d'un type de colonne DB général doit être couvert. En plus de certaines options courantes, le champ contient des options spécifiques au champ et des éléments obligatoires. Par exemple, «CharField» représente un type de caractère DB général. Puisque le type char nécessite que le nombre de caractères soit spécifié, le CharField de django nécessite également l'argument max_length.

ForeignKey est un champ légèrement spécial qui exprime une relation avec un autre modèle. Le type de colonne sera du même type que la clé primaire du modèle avec la relation attachée, et le nom de la colonne sera le nom de la propriété avec _id ajouté. Dans l'exemple du didacticiel, une colonne de type entier nommée question_id est créée. (Parce que la clé primaire par défaut est de type entier)

La classe est passée directement à l'argument en raison de la relation avec le modèle défini dans le même fichier. Si vous voulez coller la relation au modèle défini dans un autre fichier, spécifiez le modèle pour mettre la relation avec une chaîne de caractères au format «app.model». Exemple: question = models.ForeignKey ('polls.Question')

3. Ajouter une application

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#activating-models

Le simple fait d'ajouter une application avec startapp n'activera pas cette application. Il y a un élément dans la liste des applications à utiliser dans tutorial / settings.py, alors ajoutons-y l'application créée. La variable à définir est un taple nommé ʻINSTALLED_APPS` près de la ligne 33 de settings.py.

tutorial/settings.py


INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',  #← Ajouter ceci
)

Cette fois, j'ai ajouté ma propre application polls, mais si vous voulez ajouter une application django prête à l'emploi avec pip etc., ajoutez également le nom de l'application à INSTALLED_APPS. Si vous l'ajoutez ici, il sera chargé pour la migration, les modèles, les tests, etc.

4. Mise à jour de la base de données

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#activating-models (Identique à "3. Ajouter une application")

Après avoir modifié settings.py, exécutez la commande make migrations. Cette commande détecte les changements dans le modèle de chaque application et crée automatiquement un fichier de migration. En exécutant cette commande pour créer un fichier de migration, puis en exécutant la commande migrate Refléter le changement de modèle (= table) dans la base de données.

$ ./manage.py makemigrations
Migrations for 'polls':
  0001_initial.py:
    - Create model Choice
    - Create model Question
    - Add field question to choice

S'il y a un changement, il sera détecté automatiquement et un fichier de migration sera créé. Cette fois, il ne s'agit pas d'un ajout de table, mais si la valeur par défaut n'est pas définie lors de l'ajout d'un champ On vous demandera quelle devrait être la valeur par défaut

$ ./manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: messages, staticfiles
  Apply all migrations: admin, auth, polls, contenttypes, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying polls.0001_initial... OK

En exécutant la commande migrate, les paramètres seront reflétés dans la base de données. La commande de migration exécutée est enregistrée dans la table django_migrations.

-- Dans le didacticiel d'origine, après cela, le modèle est personnalisé et exécuté dans le shell. Je vais l'omettre dans ce tutoriel. La personnalisation du modèle sera expliquée dans le prochain tutoriel. https://docs.djangoproject.com/en/1.8/intro/tutorial01/#playing-with-the-api

-- Vers le prochain tutoriel

Résumé du didacticiel

Recommended Posts

Tutoriel Python Django (5)
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
Résumé du didacticiel Python Django
Tutoriel Python
Fiche technique du didacticiel Python Django
mémo du didacticiel django
Démarrer le didacticiel Django 1
Django 1.11 a démarré avec Python3.6
Tutoriel [Docker] (Python + php)
Framework Web Django Python
Didacticiel sur les associations polymorphes Django
tutoriel simple django oscar
Table de décalage Django Python
Essayez Debian + Python 3.4 + django1.7 ……
Mémo du didacticiel Python OpenCV
Note du didacticiel Django Girls
Tutoriel Cloud Run (python)
Python Django CSS reflété
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Introduction à Python Django (2) Win
[Tutoriel Python] Outil de structure de contrôle
Python
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ avec Apache
Création de liste de tâches [Python Django]
Premiers pas avec Python Django (1)
Lancez-vous avec Django! ~ Tutoriel ④ ~
Django
Premiers pas avec Python Django (3)
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Installez Python 3.7 et Django 3.0 (CentOS)
[Python] Tutoriel personnel sur l'arbre de décision
Histoire addictive GAE + python + Django
Introduction à Python Django (6)
Premiers pas avec Python Django (5)
Jusqu'à la sortie de Python [Django] de Web service [Tutorial Part 1]
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Python practice_Configuration de l'environnement virtuel ~ Installation de Django
Créer une nouvelle application utiliser python, django
python + django + scikit-learn + mecab (2) avec heroku
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Résumé du didacticiel Django Girls Première moitié
Trébucher lors du didacticiel django 1.7
Déployer le didacticiel Django sur IIS ①
Installer le framework Python django à l'aide de pip
Introduction à Python Django (2) Édition Mac
[Tutoriel Python] Une introduction facile à Python
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 5 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 1, 2, 3 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 6 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Tutoriel Django 7 ~
Tutoriel Django Crispy (Construction d'environnement sur Mac)
python kafka