[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 2

introduction

Ravi de vous rencontrer, tout le monde. Je publierai le processus de création d'une application de vote (sondage) en utilisant Django comme mémorandum. Puisque je suis un débutant de Qiita, veuillez comprendre qu'il peut être difficile à lire.

séries

Commence travail

Paramètres de la base de données

Le didacticiel Django utilise SQLite (SGBDR léger). (Il est indiqué qu'il est préférable d'utiliser la base de données OSS extensible dans l'environnement de production.)

Lorsque vous utilisez une base de données autre que SQLite, modifiez DATABASE> default> ENGINE. Vous devez également définir des paramètres supplémentaires tels que USER, PASSWORD et HOST.

condig/settings.py



DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Migrez la base de données. La traduction littérale de «migrer» signifie «déplacer / migrer», est-il donc correct de comprendre que c'est une fonction pour créer et valider la définition de la base de données utilisée dans l'application?


(poll-HcNSSqhc) C:\django\poll>python 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 auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

(poll-HcNSSqhc) C:\django\poll>

Créer un modèle

Créez un modèle pour MVC. Le modèle est une fonction qui traite les données via DB. Dans polls / models.py, spécifiez les tables et colonnes DB.

polls/modeles.py


from django.db import models

# Create your models here.

#Tableau: sondages_Question
#Colonne: question_text VARCHAR(200), pub_date DATETIME


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

#Tableau: sondages_Choice
#Colonne: question ÉTRANGER(CASCADE) KEY, choice_text VARCHAR(200), votes INTEGER
# CASCADE=Contrainte de clé externe Suit le changement de destination de référence Elle est supprimée dès qu'il n'y a pas de destination de référence


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

Activer le modèle

Enregistrez l'installation de l'application polls (voir la classe PollsConfig) dans le projet de configuration.

polls/apps.py



from django.apps import AppConfig


class PollsConfig(AppConfig):
    name = 'polls'

Écrivez polls / apps.py> PollsConfig dans config / setting.py avec des points.

config/setting.py



INSTALLED_APPS = [
    'polls.apps.PollsConfig'
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Migration de base de données. Nous allons changer le modèle, mais ce n'est qu'un fichier temporaire et ne sera pas migré (validé) vers la base de données.


(poll-HcNSSqhc) C:\django\poll>python manage.py makemigrations polls
Migrations for 'polls':
  polls\migrations\0001_initial.py
    - Create model Question
    - Create model Choice

(poll-HcNSSqhc) C:\django\poll>

Vous pouvez vérifier le fonctionnement réel de la migration de base de données comme suit. SQL tel que CREATE TABLE, CREATE INDEX, COMMIT a été émis.


(poll-HcNSSqhc) C:\django\poll>python manage.py sqlmigrate polls 0001
BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");
COMMIT;

(poll-HcNSSqhc) C:\django\poll>

Migrer la base de données. Autrement dit, engagez-vous dans DB.


(poll-HcNSSqhc) C:\django\poll>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0001_initial... OK

(poll-HcNSSqhc) C:\django\poll>

Jouez avec l'API

Commençons Python en mode interactif.

(poll-HcNSSqhc) C:\django\poll>python manage.py shell
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:37:30) [MSC v.1927 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

Nous allons exploiter la base de données avec shell. Chargez les classes Choice et Question à partir du fichier polls / models.py. Il n'y a pas encore d'objets (questions).


>>> from polls.models import Choice,Question
>>> Question.objects.all()
<QuerySet []>
>>> 

Créez un objet (question).


>>> from django.utils import timezone
>>> 
>>> q=Question(question_text="What's new?",pub_date=timezone.now()) 
>>> q.save()
>>> 
>>> q.id
1
>>>
>>> q.question_text
"What's new?"
>>>
>>> q.pub_date
datetime.datetime(2020, 10, 6, 8, 27, 6, 527001, tzinfo=<UTC>)
>>>

Enregistrez et vérifiez l'objet (question). Puisque la valeur de retour est 1, elle semble exister.


>>> q.save()
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
>>>

Cependant, avec une valeur de retour de 1, le contenu de l'objet est inconnu. Montrons le contenu. Modifiez polls / models.py.

polls/modeles.py



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

# Create your models here.

#Tableau: sondages_Question
#Colonne: question_text VARCHAR(200), pub_date DATETIME


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

    def __str__(self):
        return self.question_text

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

#Tableau: sondages_Choice
#Colonne: question ÉTRANGER(CASCADE) KEY, choice_text VARCHAR(200), votes INTEGER(Valeur initiale 0)
# CASCADE=Contrainte de clé externe Suit le changement de destination de référence Elle est supprimée dès qu'il n'y a pas de destination de référence


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

    def __str__(self):
        return self.choice_text

Vérifiez à nouveau l'objet (question)


>>> from polls.models import Choice, Question
>>> 
>>> Question.objects.all()
<QuerySet [<Question: What's>]>
>>> 

Voyons comment récupérer diverses données.


>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's>]>
>>>

>>> Question.objects.get(pk=1)
<Question: What's>
>>>

Déterminez si la date du vote (pub_date) se situe dans la journée.


>>> q = Question.objects.get(pk=1)                              
>>>     
>>> q.was_published_recently()
True
>>>

Créez des données pour la table Choix auxquelles la question fait référence en externe. Autrement dit, créez un choix pour la question. À l'heure actuelle, la relation question-choix est un-à-plusieurs.


#Déclarer de créer des options pour une question particulière
>>> q.choice_set.all()
<QuerySet []>
>>> 
#Créer 3 choix Objet Question → Accéder à l'objet Choix
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> 
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> 
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
>>> 
#Objet de choix → L'objet Question est également accessible
>>> c.question
<Question: What''s this?>
>>>
#Vérifiez toutes les options
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>>
>>> q.choice_set.count()
3
>>> 
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>>
#Supprimer un choix
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
(1, {'polls.Choice': 1})
>>> 
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>]>
>>> 

Présentation de Django Admin

Créer un utilisateur administrateur


(poll-HcNSSqhc) C:\django\poll>python manage.py createsuperuser
Username (leave blank to use '***'): admin
Email address: [email protected]
Password:
Password (again):
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
Superuser created successfully.

(poll-HcNSSqhc) C:\django\poll>

Démarrer le serveur de développement


(poll-HcNSSqhc) C:\django\poll>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
October 06, 2020 - 21:09:30
Django version 3.1.2, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Accédez à http://127.0.0.1:8000/admin/. image.png

Entrez dans le site d'administration

Lorsque vous vous connectez, vous verrez un écran comme celui-ci. image.png

Autoriser les applications de sondage à être modifiées sur l'administrateur

Ajoutez à polls / admin.py.

polls/admin.py



from django.contrib import admin

# Register your models here.
from .mdoeles import Question

admin.site.register(Question)

Explorez les fonctionnalités de l'administrateur

L'application Question for Polls a été ajoutée.

image.png

À la destination où j'ai cliqué sur Question et effectué la transition, il y avait "Qu'est-ce que c'est?" Il semble que vous puissiez créer ou modifier de nouvelles questions.

image.png

Aujourd'hui, c'est ici. Merci beaucoup.

Recommended Posts

[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django-Partie 7-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 2
[Débutant] [Python / Django] Un ingénieur web débutant a essayé un didacticiel Django - Partie 0-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un tutoriel Django - Partie 5
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un tutoriel Django - Partie 6
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 4
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 3
Framework Web Django Python
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
(Python) Essayez de développer une application Web en utilisant Django
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Web scraping débutant avec python
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 02
Un débutant en python a essayé de faire un stage dans une entreprise informatique
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 01
Un ingénieur en arts libéraux a essayé de frapper 100 processus linguistiques en Python 00
[Python / Django] Créer une API Web qui répond au format JSON
J'ai essayé webScraping avec python.
Créer une application Web avec Django
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
le codeur Web a essayé d'exceller en Python
Les débutants en Python ont essayé d'utiliser Bottle et cela a fonctionné facilement de manière inattendue
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
Une introduction aux applications Web Python auto-conçues pour un ingénieur Web de troisième année paresseux
Une note où un débutant Python s'est retrouvé coincé
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
J'ai une question! (Python, django) Facile
Démonisez une application Web Python avec Supervisor
J'ai essayé un langage fonctionnel avec Python
[Python] Une application web rapide avec Bottle!
J'ai créé une API Web
Utiliser Django à partir d'un script Python local
Exécutez une application Web Python avec Docker
Créez un framework Web avec Python! (1)
J'ai essayé de comparer le cadre d'application Web
Créez un framework Web avec Python! (2)
J'ai fait une application WEB avec Django
Un débutant en python a tenté de faire un stage dans une entreprise informatique [Enquête sur le chatbot jour 2]
Un débutant en python a tenté de faire un stage dans une entreprise informatique [Processus de développement du jour 1]
J'ai recherché les compétences nécessaires pour devenir ingénieur web avec Python
Comment ouvrir un navigateur Web à partir de python
J'ai essayé le web scraping en utilisant python et sélénium
Python Web Framework Django vs Pyramid vs Flask Décembre 2015
J'ai essayé de jouer à un jeu de frappe avec Python
Démarrez un serveur Web Python simple avec Docker
[Python] Créer un environnement de développement Django avec Docker
[Python] Dessinez un Mickey Mouse avec une tortue [Débutant]
Créer une carte Web en utilisant Python et GDAL
Étapes pour développer une application Web en Python
[Python] Préparation au développement Web (création d'un environnement virtuel)
J'ai essayé de lire un fichier CSV en utilisant Python
Enregistrement de l'examen de base de la certification d'ingénieur Python3 pour débutant en programmation
Lancer un serveur Web avec Python et Flask
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 2
Exécutez des fichiers Python à partir de HTML en utilisant Django