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
OS:Mac OSX10.11 python:3.4.2 django:1.8.5
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
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>.
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/
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#database-setup
Source → balise project_start
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',
}
}
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
oupostgresql
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
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
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
.
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial01/#the-development-server
Source → balise project_start
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
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 ʻipconfiget ʻifconfig
.
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.
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.
Ajoutez une application avec $ ./manage.py startapp appname
.
Décrivez le modèle (table de base de données) utilisé dans l'application dans ʻappname / models.py`.
Ajoutez l'application créée à project / settings.py
Mise à jour de la base de données
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.
Écrivez ʻappname / urls.py` et associez l'URL aux vues
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`.
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.
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)
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'
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'argumentmax_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')
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.
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
Recommended Posts