Django Polls Simplified — Налаштування бази даних

Це продовження попереднього поста:

[

Django Polls спрощено — Створення додатку опитувань

Як створити Django додаток, продовження:

chrisdevcode.medium.com

](/django-polls-simplified-creating-the-polls-app-3117c402157c?source=post_page-----3ddc1c3a8543--------------------------------)

Тепер відкрийте config/settings.py. Це стандартний Python модуль, що містить змінні на рівні модуля, які представляють налаштування Django.

За замовчуванням, конфігурація DATABASES використовує SQLite. Це найпростіший вибір для новачків у базах даних або тих, хто тільки починає вивчати Django.

SQLite включено в Python, тому вам не потрібно встановлювати додаткове програмне забезпечення для його використання як базу даних.

Однак варто розглянути більш масштабовану опцію, як-от PostgreSQL для вашого першого серйозного проекту. Це може заощадити вам час і зусилля при міграції на іншу базу даних у майбутньому.

Документація щодо використання інших баз даних:

[

Як встановити Django | Документація Django

Веб-фреймворк для перфекціоністів з дедлайнами.

docs.djangoproject.com

](https://docs.djangoproject.com/en/5.1/topics/install/?source=post_page-----3ddc1c3a8543--------------------------------#database-installation)

Поки ви редагуєте config/settings.py, встановіть TIME_ZONE на ваш часовой пояс. Я встановлю свою зону на Africa/Nairobi:

# Інтернаціоналізація  
# https://docs.djangoproject.com/en/5.1/topics/i18n/  

LANGUAGE_CODE = 'en-us'  

TIME_ZONE = 'Africa/Nairobi'  

USE_I18N = True  

USE_TZ = True

Зверніть увагу на налаштування INSTALLED_APPS. Вони містять список всіх Django додатків, що зараз увімкнені в цьому екземплярі.

Додатки можуть бути повторно використані в різних проектах і навіть упаковані для розповсюдження, що дозволяє іншим інтегрувати їх у свої проекти.

За замовчуванням, INSTALLED_APPS містить такі додатки, які всі постачаються разом з Django:

INSTALLED_APPS = [  
 'django.contrib.admin',  
 'django.contrib.auth',  
 'django.contrib.contenttypes',  
 'django.contrib.sessions',  
 'django.contrib.messages',  
 'django.contrib.staticfiles',  
]
  • django.contrib.admin – Адміністративний сайт.
  • django.contrib.auth – Система аутентифікації.
  • django.contrib.contenttypes – Фреймворк для типів вмісту.
  • django.contrib.sessions – Фреймворк для сесій.
  • django.contrib.messages – Фреймворк для повідомлень.
  • django.contrib.staticfiles – Фреймворк для управління статичними файлами.

Ці додатки включені за замовчуванням для зручності, оскільки є типовими для більшості випадків.

Деякі з цих додатків використовують хоча б одну таблицю в базі даних, тому нам потрібно створити ці таблиці в базі перед їх використанням.

Для цього виконайте наступну команду:

python manage.py migrate

Якщо ви відкриєте файл db.sqlite3, ви побачите створені таблиці:

pic

Створення моделей

У Django моделі — це класи Python, які представляють таблиці бази даних. Вони спрощують роботу з базами даних, дозволяючи використовувати код Python замість написання SQL запитів.

Моделі визначають структуру ваших даних (поля), як різні частини даних пов'язані між собою (відносини), та будь-які дії, які ви хочете виконувати з даними (методи).

[

Моделі | Документація Django

Веб-фреймворк для перфекціоністів з дедлайнами.

docs.djangoproject.com

](https://docs.djangoproject.com/en/5.1/topics/db/models/?source=post_page-----3ddc1c3a8543--------------------------------)

Ми створимо дві моделі в нашому додатку опитувань: Question і Choice. Модель Question має текст питання та дату публікації. Модель Choice має два поля: текст варіанту та кількість голосів. Кожен Choice пов'язаний з Question.

Класи Python представляють ці концепції.

Редагуйте файл 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, on_delete=models.CASCADE)  
 choice_text = models.CharField(max_length=200)  
 votes = models.IntegerField(default=0)

У наведеному коді кожна модель є класом, що наслідує від django.db.models.Model. Ці класи визначають структуру таблиць бази даних за допомогою полів.

Поля: Поля — це змінні, що представляють стовпці в базі даних. Наприклад:

  • CharField — для тексту.
  • DateTimeField — для дат та часу.
  • IntegerField — для чисел.

Імена полів: Імена змінних (наприклад, question_text, pub_date) стають іменами стовпців у базі даних.

Параметри полів:

• Ви можете дати полю власну мітку, наприклад, “date published” для pub_date. Якщо не вказувати, Django використовуватиме ім’я змінної як мітку.

• Деякі поля потребують додаткових аргументів. Наприклад, для CharField потрібен параметр max_length, який визначає максимальну кількість дозволених символів.

• Ви можете встановлювати значення за замовчуванням для полів, наприклад, votes = models.IntegerField(default=0).

Відносини: Для зв'язку моделей можна використовувати поля, такі як ForeignKey. У цьому прикладі:

• Кожен Choice пов'язаний з Question за допомогою ForeignKey. Це означає, що багато варіантів можуть належати одному питанню.

Django спрощує налаштування та управління цими зв'язками та типами даних у вашій базі даних.

Активація моделей

Цей невеликий фрагмент коду моделі надає Django багато інформації. За його допомогою Django може:

  • Створити схему бази даних (команди CREATE TABLE) для цього додатка.
  • Створити Python API для доступу до об'єктів Question і Choice.

Але спочатку нам потрібно повідомити проекту, що додаток polls було встановлено.

Щоб включити додаток у наш проект, потрібно додати посилання на його клас конфігурації в налаштування INSTALLED_APPS. Клас PollsConfig знаходиться у файлі polls/apps.py, тому його точний шлях буде ‘polls.apps.PollsConfig’. Відкрийте файл config/settings.py і додайте цей точний шлях до налаштування INSTALLED_APPS. Виглядатиме це ось так:

# Опис додатків  

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

Тепер Django знає, що потрібно включити додаток polls.

Запустимо ще одну команду:

python manage.py makemigrations polls  

python manage.py migrate

Запускаючи команду makemigrations, ви повідомляєте Django, що ви внесли деякі зміни в свої моделі (в даному випадку, ви створили нові) і хочете, щоб ці зміни були збережені як міграція.

Міграції — це спосіб, яким Django зберігає зміни у ваших моделях (і, відповідно, у схемі вашої бази даних) — файли на диску.

Якщо бажаєте, ви можете переглянути міграцію для вашої нової моделі; це файл polls/migrations/0001_initial.py.

# Сгенеровано Django 5.1.2 2024-11-04 14:10  

import django.db.models.deletion  
from django.db import migrations, models  


class Migration(migrations.Migration):  

 initial = True  

 dependencies = [  
 ]  

 operations = [  
 migrations.CreateModel(  
 name='Question',  
 fields=[  
 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),  
 ('question_text', models.CharField(max_length=200)),  
 ('pub_date', models.DateTimeField(verbose_name='date published')),  
 ],  
 ),  
 migrations.CreateModel(  
 name='Choice',  
 fields=[  
 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),  
 ('choice_text', models.CharField(max_length=200)),  
 ('votes', models.IntegerField(default=0)),  
 ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')),  
 ],  
 ),  
 ]

Не хвилюйтесь, вам не потрібно читати ці файли кожного разу, коли Django їх генерує, але вони створені таким чином, щоб бути зручними для редагування людьми, якщо ви хочете вручну налаштувати, як саме Django вносить зміни.

Перекладено з: Django Polls Simplified — Database Setup

Leave a Reply

Your email address will not be published. Required fields are marked *