Django 3: База данных и модели — урок 7

Создадим новую страницу, таблицу в базе данных и наполним её записями.

Создание приложения

В текущем проекте есть приложение, обрабатывающее ссылки главной страницы и страницы «О нас». Для обработки страниц новостей (добавление, вывод, редактирование, удаление) создадим отдельное приложение. Это позволит разделить функционал сайта на логические категории.

Создадим приложение с помощью терминала:

python manage.py startapp news

В созданном приложении news находятся файлы, аналогичные основному приложению. После создания, зарегистрируем его в settings.py:

INSTALLED_APPS = [
    # ... другие приложения ...
    'news',
    # ...
]

Настройка URL-адресов

В файле urls.py проекта добавим обработчик для URL-адресов, начинающихся с /news/:

from django.urls import path, include

urlpatterns = [
    # ... другие URL-адреса ...
    path('news/', include('news.urls')),
    # ...
]

Создадим файл urls.py внутри приложения news:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.news_home, name='news_home'),
]

Этот код указывает, что при переходе по любому URL-адресу, начинающемуся с /news/, будет вызываться функция news_home из views.py приложения news. Пустая строка после /news/ означает, что функция будет вызвана и для /news/.

Создание представления и шаблона

В views.py приложения news создадим функцию news_home:

from django.shortcuts import render

def news_home(request):
    return render(request, 'news/news_home.html')

Здесь используется функция render для отображения шаблона news/news_home.html. Создадим папку templates/news/ в приложении news и файл news_home.html:

{% extends 'main/base.html' %}

{% block title %}Новости на сайте{% endblock %}

{% block content %}
    <h1>Новости на сайте</h1>
{% endblock %}

Этот шаблон наследует базовый шаблон base.html из приложения main и изменяет заголовок. Изначально, для демонстрации, будем использовать шаблон about.html из приложения main. Запустим локальный сервер командой python manage.py runserver и перейдем по адресу /news/. Мы увидим страницу «О нас». После создания шаблона news_home.html, обновим страницу и увидим корректный шаблон. Добавим ссылку на страницу новостей в навигацию.

Работа с базой данных: создание модели и миграции

Создадим модель Article в файле models.py приложения news:

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=50, verbose_name='Название')
    anons = models.CharField(max_length=250, verbose_name='Анонс')
    full_text = models.TextField(verbose_name='Статья')
    date = models.DateTimeField(verbose_name='Дата публикации')

    def __str__(self):
        return f'{self.title}'

Эта модель описывает таблицу articles с полями: title, anons, full_text и date. Для создания таблицы, выполним миграции:

python manage.py makemigrations
python manage.py migrate

Команда makemigrations создает файлы миграции, а migrate — применяет их.

Панель администратора

Для доступа к панели администратора, перейдем по адресу /admin/. Зарегистрируем модель Article в admin.py приложения news:

from django.contrib import admin
from .models import Article

admin.site.register(Article)

Обновим панель администратора. Переведем её на русский язык, изменив переменную LANGUAGE_CODE на ‘ru’ в файле settings.py. Создадим суперпользователя командой:

python manage.py createsuperuser

Теперь можем войти в панель администратора и добавлять новые записи в таблицу articles.

В этом уроке мы создали приложение, настроили URL-адреса, создали представление и шаблон, а также создали модель для работы с базой данных и настроили панель администратора. В следующем уроке мы научимся выбирать данные из базы данных и отображать их на сайте.

Что будем искать? Например,программа