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
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>
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)
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>
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>]>
>>>
(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>
(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/.
Wenn Sie sich anmelden, wird ein Bildschirm wie dieser angezeigt.
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)
Frage für Umfragen App wurde hinzugefügt.
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.
Heute ist bis hierher. Vielen Dank.
Recommended Posts