Tutoriel Python Django (2)

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/tutorial02/

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/tutorial02.html

Tutoriel 1Résumé du didacticiel

Aperçu

Cette fois, je vais vous expliquer le site de gestion de django. Un site de gestion est préparé en standard dans django, et les utilisateurs disposant des droits du personnel peuvent utiliser le modèle à partir d'ici. Modèles ajoutés par moi-même, y compris le modèle utilisateur que django a en standard (Par exemple, les deux modèles de vote créés dans le didacticiel) créent également semi-automatiquement une page comme celle-là.

S'il s'agit d'une application Web qui ne gère que des données telles que l'enregistrement de données, l'affichage d'une liste et la recherche Vous pouvez facilement le créer simplement en personnalisant cette page.

Préparation des super utilisateurs

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#creating-an-admin-user Source → balise ʻadd_app_4_database_migration` (pas de changement)

Un utilisateur disposant de l'autorité du personnel est tenu de toucher le site de gestion. Un super utilisateur pour django est créé à l'aide de la commande createuperuser.

$ ./manage.py createsuperuser
Username (leave blank to use 'shimomura'): admin
Email address:
Password:
Password (again):
Superuser created successfully.

Lorsque vous exécutez la commande createuperuser, vous serez invité à entrer votre nom d'utilisateur, votre adresse e-mail et votre mot de passe. Si le nom d'utilisateur est par défaut, le nom d'utilisateur du PC sera entré tel quel. Cette fois, c'est ʻadmin`. L'e-mail peut être vide. Pour Mot de passe, entrez deux fois la même chaîne de caractères.

Enfin, lorsque le message "Superuser créé avec succès" apparaît, le processus est terminé.

Accéder au site de gestion

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#start-the-development-server Source → Balise ʻadd_app_4_database_migration954ba86`

Après avoir créé un super utilisateur, démarrez le serveur de test et accédez au site de gestion. Pour démarrer le serveur, utilisez la commande runserver.

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

System check identified no issues (0 silenced).
November 05, 2015 - 07:37:15
Django version 1.8.5, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Dans cet état avec un navigateur http://localhost:8000/admin/ Lorsque vous y accédez, vous devriez être redirigé vers l'écran de connexion comme indiqué ci-dessous.

Kobito.b0bz7R.png

Si vous parvenez à vous connecter avec succès, l'écran suivant s'affiche. Par défaut, seuls les modèles d'authentification (Groupes et Utilisateurs) sont affichés.

Kobito.WQw8Oi.png

--

Localisation en japonais

Je pense que j'ai pu afficher le site en toute sécurité, mais comme vous pouvez le voir, le site de gestion est en anglais par défaut. Je n'aime pas l'anglais, alors utilisons le japonais.

Bien sûr, django prend en charge plusieurs langues. La langue à afficher est définie près de la ligne 103 de settings.py. La valeur par défaut est ʻen-us, alors changeons cela en ja`.

settings.py_Près de la ligne 103


# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'

Une fois le problème résolu, essayez à nouveau d'accéder au site de gestion. http://localhost:8000/admin/

Kobito.dVaOZw.png

Il semble qu'il ait été traduit avec succès en japonais.

Modèle de vote ajouté

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin Source → 954ba86 35ec2c6

Maintenant que vous pouvez voir le site de gestion en toute sécurité, affichons également votre propre modèle. Les paramètres et la personnalisation du modèle à afficher sur le site de gestion sont décrits dans ʻapp / admin.py`.

Cette fois, nous ajouterons le modèle Question de l'application sondages en suivant le tutoriel.

polls/admin.py


from django.contrib import admin

from .models import Question


admin.site.register(Question)

Il devrait maintenant être visible sur le site d'administration.

Kobito.Q3fesY.png

Ajouter et personnaliser des données

Ajouter des données

Essayons également d'ajouter des données. Lorsque vous appuyez sur le lien d'ajout, le formulaire d'ajout de données s'affiche. Étant donné que le modèle Question avait deux champs, question_text et pub_date, Deux éléments sont également affichés sur l'affichage du formulaire.

Kobito.24CSrL.png

Kobito.dMucDK.png

Lorsque vous vous inscrivez, vous devriez avoir une donnée appelée "Objet Question". Si vous vous inscrivez à nouveau, deux «objets Question» seront affichés.

Kobito.eBQJpR.png

Personnalisation du nom de l'objet

Puisque nous ne savons pas de quel type de données il s'agit, modifions la chaîne de caractères qui représente l'objet. Pour le changer, remplacez simplement la méthode __str__ ( __unicode__ dans le cas de la série python2) du modèle que vous souhaitez modifier. Cette fois, nous le modifierons pour que le contenu de la question soit affiché.

polls/models.py


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

    def __str__(self):
        return self.question_text

Kobito.ilTlCf.png

Personnaliser le nom du modèle

Si vous souhaitez modifier la chaîne de caractères qui représente le modèle lui-même (Question dans ce cas), définissez-la dans la classe Meta </ b>. Le nom qui représente le modèle avec verbose_name, Vous pouvez définir un nom qui représente la forme plurielle du modèle avec verbose_name_plural.

polls/models.py


class Question(models.Model):
    class Meta:
        verbose_name = 'Question'
        verbose_name_plural = 'Forme multiple de question'

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

Kobito.r2Xvyz.png

Assurez-vous que "Questions" et "Questions" sont remplacés par "questions" et "questions plurielles".

Personnalisez la commande

Par défaut, l'ordre d'enregistrement est décroissant (les plus récents apparaissent), mais modifions cela pour qu'il soit arrangé à partir du plus récent à la date de publication (pub_date).

Les changements sont définis dans la propriété ʻorderingde la classe Meta du modèle. La valeur du paramètre est le nom du champ, et si vous souhaitez l'utiliser dans l'ordre décroissant, ajoutez-` au début.

class Question(models.Model):
    class Meta:
        verbose_name = 'Question'
        verbose_name_plural = 'Forme multiple de question'
        ordering = ['-pub_date']

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

Commencez par organiser dans l'ordre du contenu des questions, et si elles sont identiques, si vous souhaitez organiser dans l'ordre décroissant de la date de publication ordering = ['question_text', '-pubdate'] Écrivez comme suit. Veuillez vérifier qu'ils sont réellement réorganisés.

--

Il est également possible de personnaliser le formulaire lui-même lors de l'ajout. (J'expliquerai dans la section suivante ci-dessous) Dans le didacticiel d'origine, lors de l'ajout d'un objet Question après cela J'explique comment changer la conception du formulaire, mais je vais omettre l'explication cette fois. Si vous êtes intéressé, veuillez consulter le tutoriel du chef de famille. https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-form

Objets avec relation

Documents → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#adding-related-objects (Expliqué depuis le milieu avec ʻAjout d'un élément en ligne``) Source → 35ec2c6 84f1086

Nous ajouterons un autre modèle, Choice, dont dispose l'application de sondage. Ce modèle a une clé étrangère (relation avec le modèle Question), à quoi ressemblera-t-il?

Tout d'abord, éditez polls / admin.py et ajoutez Choice pour l'afficher dans admin.

polls/admin.py


from django.contrib import admin

from .models import Question
from .models import Choice  #Ajouter ici


admin.site.register(Question)
admin.site.register(Choice)  #Ajouter ici

Kobito.yD8Cfw.png

Il semble qu'il a été ajouté en toute sécurité. Le modèle Choice n'a pas de paramètres Meta, il sort donc tel quel. Ensuite, nous examinerons l'écran supplémentaire.

Kobito.dfblb5.png

Dans le cas du champ ForeignKey, il est affiché sous forme de liste de sélection dans le formulaire comme celui-ci. Vous pouvez également créer un nouvel objet Question en appuyant sur le bouton vert plus sur le côté droit.

Kobito.DcXGUI.png

Le contenu est comme ça, et l'objet du modèle Question créé précédemment est inclus. Si vous n'avez pas défini __str__, les trois seront affichés comme Objet Question et vous serez triste. Bien sûr, vous pouvez personnaliser librement ce que vous souhaitez offrir à cette option. L'ordre est trié par «ordre» défini dans la classe Meta du modèle.

Personnalisation du modèle pour le site d'administration

De cette façon, simplement enregistrer le modèle avec la fonction ʻadmin.site.register` fera diverses choses automatiquement, mais Avec une petite modification, vous pouvez personnaliser le contenu du formulaire, afficher la liste, ajouter des éléments de recherche, etc.

Lors de la personnalisation, passez la classe qui décrit le comportement sur le site Admin au deuxième argument de la fonction ʻadmin.site.reigster. Cette classe hérite de la classe ʻadmin.ModelAdmin et ne remplace que les parties nécessaires par vous-même. Comme il est difficile de comprendre s'il ne s'agit que de phrases, nous montrerons en fait des exemples de chaque personnalisation.

Ajouter un élément en ligne

Documents → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#adding-related-objects Source → 84f1086 → ʻe4bacf7`

Dans les exemples jusqu'à présent, si vous souhaitez ajouter des questions et des choix, créez d'abord la question d'origine, puis J'ai dû le sélectionner sur la page supplémentaire de Choix. Il est difficile de sélectionner les questions une par une dans Choice, et il y a une possibilité de faire une erreur dans la sélection.

Le formulaire en ligne est pratique là-bas. Si vous l'utilisez, ce sera l'objet de la relation (question dans ce cas) Vous pouvez créer l'objet cible (Choice dans ce cas) en même temps.

Dans le cas du site d'administration, une classe pour l'affichage d'Inline appelée InlineAdmin est préparée. Cette fois, nous utiliserons la classe StackedInline.

Le code source modifié est le suivant.

polls/admin.py


from django.contrib import admin

from .models import Question
from .models import Choice


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

Ajoutez les définitions de «ChoiceInline» et «QuestionAdmin» au deuxième argument lors de l'enregistrement d'une question. Il est modifié pour passer «QuestionAdmin».

ʻAdmin.StackedInline` est une classe de base pour créer des Inlines au format Stacked. Définissez le modèle cible (Choix dans ce cas) et le nombre d'écrans (extra = 3). Vous pouvez également définir le nombre maximum et déterminer s'il peut ou non être supprimé.

ʻAdmin.ModelAdmin` est une classe permettant de personnaliser le comportement du modèle sur le site de gestion. Cette fois, les inserts sont définis et le comportement lors de l'ajout et de la modification d'objets est modifié.

Si vous changez jusqu'à présent et accédez à nouveau à la page supplémentaire (ou à la page d'édition) de Question sur le site de gestion Vous pouvez voir que vous pouvez modifier les choix en même temps.

Kobito.3GQrd4.png

Personnaliser l'affichage des objets

Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-change-list Source → ʻe4bacf77f5128a`

Maintenant que l'enregistrement et l'édition s'améliorent, personnalisons l'affichage de la liste. Pour changer l'affichage, définissez list_display dans la classe (QuestionAdmin) créée en héritant de ʻadmin.ModelAdmin`.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date')
...

Kobito.2sV4uA.png

La liste, qui était un paysage meurtrier, est devenue un peu plus vivante. Pour tous les modèles, django ajoutera automatiquement une clé primaire. En passant, ajoutons cela également.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date')
...

Kobito.MR1ddC.png

C'est un sentiment agréable.

Plus de personnalisation

Faisons quelque chose d'un peu spécial, en suivant le tutoriel original. En plus des champs, list_display peut être défini sur une méthode sans argument.

Ajoutez une méthode was_published_recently au modèle Question pour voir si la question a été publiée dans la journée.

polls/models.py


import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
...

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
...

Ensuite, ajoutez cette méthode à list_display.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
...

Kobito.gpHA62.png

Vous pouvez le voir correctement. Il peut être intéressant de créer une méthode qui renvoie le nombre de choix associés à la question.

Personnalisation supplémentaire

Si la cible de list_display est une méthode, vous pouvez modifier l'affichage et définir les conditions d'ordre en ajoutant des attributs à la méthode. Définissons ʻadmin_order_field, boolean, short_description` en suivant le tutoriel original.

polls/models.py


...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'
...

Kobito.qOD9IC.png

Ça fait du bien. ʻAdmin_order_fielddéfinit le champ à regarder lors du tri. Dans cet exemple, ils sont triés par le champpub_date`. En définissant cet attribut, vous pouvez cliquer sur l'en-tête du tableau et le trier.

Filtrer, ajouter une recherche

Enfin, ajoutons un filtre et une recherche. Définissez simplement les propriétés dans QuestionAdmin comme dans l'exemple.

polls/admin.py


...
class QuestionAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
    search_fields = ['question_text']
...

Kobito.SrObQZ.png

Vous pouvez facilement ajouter des filtres et des recherches comme celui-ci.

-- Vers le prochain tutoriel

Résumé du didacticiel

Recommended Posts

Tutoriel Python Django (5)
Tutoriel Python Django (2)
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
Résumé du didacticiel Python
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
[Tutoriel Python] Structure des données
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 (4)
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 (1) avec heroku
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 ~