[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 2-

Einführung

Schön euch kennenzulernen, alle zusammen. Ich werde den Prozess der Erstellung eines Abstimmungsantrags mit Django als Memorandum veröffentlichen. Da ich ein Anfänger von Qiita bin, verstehen Sie bitte, dass es schwierig sein kann, es zu lesen.

Serie

Fang an zu arbeiten

Datenbankeinstellungen

Das Django-Tutorial verwendet SQLite (leichtes RDBMS). (Es wird angegeben, dass es besser ist, die erweiterbare OSS-Datenbank in der Produktionsumgebung zu verwenden.)

Wenn Sie eine andere Datenbank als SQLite verwenden, ändern Sie DATABASE> Standard> ENGINE. Sie müssen auch zusätzliche Einstellungen wie USER, PASSWORD und HOST vornehmen.

condig/settings.py



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

Migrieren Sie die Datenbank. Migrieren hat die Bedeutung Verschieben / Migrieren, wenn es wörtlich übersetzt wird, und hier sollte verstanden werden, dass es eine Funktion ist, die Definition der in der Anwendung verwendeten Datenbank zu erstellen und festzuschreiben.


(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>

Modell erstellen

Erstellen Sie ein Modell für MVC. Modell ist eine Funktion, die Daten über DB verarbeitet. Geben Sie in polls / models.py DB-Tabellen und -Spalten an.

polls/modeles.py


from django.db import models

# Create your models here.

#Tabelle: Umfragen_Question
#Spalte: Frage_text VARCHAR(200), pub_date DATETIME


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

#Tabelle: Umfragen_Choice
#Spalte: Frage AUSSEN(CASCADE) KEY, choice_text VARCHAR(200), votes INTEGER
# CASCADE=Externe Schlüsselbeschränkung Folgt der Änderung des Referenzziels.


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

Aktivieren Sie das Modell

Registrieren Sie die Installation der Polls-Anwendung (siehe PollsConfig-Klasse) im Konfigurationsprojekt.

polls/apps.py



from django.apps import AppConfig


class PollsConfig(AppConfig):
    name = 'polls'

Schreiben Sie polls / apps.py> PollsConfig in config / settings.py mit Punkten.

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',
]

DB-Migration. Wir werden das Modell ändern, aber es ist nur eine temporäre Datei und wird nicht in die Datenbank migriert (festgeschrieben).


(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>

Sie können den tatsächlichen Betrieb der DB-Migration wie folgt überprüfen. SQL wie CREATE TABLE, CREATE INDEX, COMMIT wurde ausgegeben.


(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>

DB migrieren. Das heißt, Commit zu 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>

Spielen Sie mit der API

Starten wir Python im interaktiven Modus.

(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)
>>> 

Wir werden die DB mit Shell betreiben. Laden Sie die Klassen Choice und Question aus der Datei polls / models.py. Es gibt noch keine Objekte (Fragen).


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

Erstellen Sie ein Objekt (Frage).


>>> 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>)
>>>

Speichern und überprüfen Sie das Objekt (Frage). Da der Rückgabewert 1 ist, scheint er zu existieren.


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

Bei einem Rückgabewert von 1 ist der Inhalt des Objekts jedoch unbekannt. Lassen Sie uns den Inhalt anzeigen. Bearbeiten Sie polls / models.py.

polls/modeles.py



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

# Create your models here.

#Tabelle: Umfragen_Question
#Spalte: Frage_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)

#Tabelle: Umfragen_Choice
#Spalte: Frage AUSSEN(CASCADE) KEY, choice_text VARCHAR(200), votes INTEGER(Anfangswert 0)
# CASCADE=Externe Schlüsselbeschränkung Folgt der Änderung des Referenzziels.


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

Überprüfen Sie das Objekt (Frage) erneut


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

Mal sehen, wie man verschiedene Daten abruft.


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

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

Stellen Sie fest, ob das Abstimmungsdatum (pub_date) innerhalb eines Tages liegt.


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

Erstellen Sie Daten für die Auswahltabelle, auf die die Frage extern verweist. Erstellen Sie also eine Auswahl für die Frage. Zu diesem Zeitpunkt ist die Frage-Wahl-Beziehung eins zu viele.


#Deklarieren Sie, Optionen für eine bestimmte Frage zu erstellen
>>> q.choice_set.all()
<QuerySet []>
>>> 
#3 Auswahlmöglichkeiten erstellen Fragenobjekt → Zugriff auf Auswahlobjekt
>>> 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)
>>> 
#Auswahlobjekt → Auf das Frageobjekt kann ebenfalls zugegriffen werden
>>> c.question
<Question: What''s this?>
>>>
#Überprüfen Sie alle Optionen
>>> 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>]>
>>>
#Löschen Sie eine Auswahl
>>> 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>]>
>>> 

Wir stellen vor: Django Admin

Erstellen Sie einen Administrator


(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>

Starten Sie den Entwicklungsserver


(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.

Gehen Sie zu http://127.0.0.1:8000/admin/. image.png

Geben Sie die Admin-Site ein

Wenn Sie sich anmelden, wird ein Bildschirm wie dieser angezeigt. image.png

Ermöglichen, dass Umfrage-Apps im Administrator bearbeitet werden

Zu polls / admin.py hinzufügen.

polls/admin.py



from django.contrib import admin

# Register your models here.
from .mdoeles import Question

admin.site.register(Question)

Entdecken Sie die Funktionen von admin

Frage für Umfragen App wurde hinzugefügt.

image.png

An dem Ziel, an dem ich auf Frage geklickt und gewechselt habe, war "Was ist das?" Es scheint, dass Sie neue Fragen erstellen oder bearbeiten können.

image.png

Heute ist bis hierher. Vielen Dank.

Recommended Posts

[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 7-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 2-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 0-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 5-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 6-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 4-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 3-
Django Python Web Framework
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Web Scraping Anfänger mit Python
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 02 zu klopfen
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 01 zu klopfen
Ein Ingenieur für freie Künste hat versucht, 100 Sprachprozesse in Python 00 zu klopfen
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Ich habe versucht, WebScraping mit Python.
Erstellen Sie eine Webanwendung mit Django
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Webcodierer versucht Excel in Python
Python-Anfänger haben versucht, Bottle zu verwenden, und es hat unerwartet leicht funktioniert
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Eine Einführung in selbst erstellte Python-Webanwendungen für einen trägen Webingenieur im dritten Jahr
Eine Notiz, in der ein Python-Anfänger stecken blieb
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Ich habe eine Frage! (Python, Django) Einfach
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Ich habe eine funktionale Sprache mit Python ausprobiert
[Python] Eine schnelle Webanwendung mit Bottle!
Ich habe eine Web-API erstellt
Verwenden Sie Django aus einem lokalen Python-Skript
Führen Sie eine Python-Webanwendung mit Docker aus
Erstellen Sie ein Webframework mit Python! (1)
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
Erstellen Sie ein Webframework mit Python! (2)
Ich habe eine WEB-Bewerbung bei Django gemacht
Ein Python-Anfänger hat versucht, bei einem IT-Unternehmen zu praktizieren [Tag 2 Chatbot-Umfrage]
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 1 Entwicklungsprozess]
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
So öffnen Sie einen Webbrowser über Python
Ich habe versucht, Web-Scraping mit Python und Selen
Python Web Framework Django gegen Pyramide gegen Flasche Dezember 2015
Ich habe versucht, mit Python ein Tippspiel zu spielen
Starten Sie mit Docker einen einfachen Python-Webserver
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
[Python] Zeichne eine Mickey Mouse mit Turtle [Anfänger]
Erstellen Sie eine Webmap mit Python und GDAL
Schritte zum Entwickeln einer Webanwendung in Python
[Python] Webentwicklungsvorbereitung (Erstellen einer virtuellen Umgebung)
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Programmieranfänger Python3 Ingenieur Zertifizierung Grundprüfungsprotokoll
Starten Sie einen Webserver mit Python und Flask
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Führen Sie Python-Dateien mit Django aus HTML aus