Ваш первый сайт на Django: обзор фреймворка на Python
Познакомимся с основами Джанго и рассмотрим его возможности. Посмотрим как скачать, установить и вывести первый результат на страницу из админки.


Слыша «Django» (Джанго), на ум может прийти, фильм - «Джанго освобожденный», или же имя знаменитого гитариста - Джанго Рейнхардт.
В 2005 году фильма не существовало, а среди разработчиков были музыканты, потому теперь у программистов термин Django имеет четкую ассоциацию.
Django часто воспринимают за библиотеку, но на самом деле это бесплатный и открытый фреймворк (код который диктует структуру проекта).
Django появился на свет, чтобы упростить разработку новостных сайтов, но за десятилетия в его развитии участвовали несколько тысяч программистов со всего мира, потому его используют для создания интернет магазинов, каталогов, соц. сетей, образовательных порталов, систем управления бронированием, иными словами для сайтов любой сложности.
Преимущество Django в том, что он написан на популярном языке python, что открывает доступ к многочисленным библиотекам сообщества для работы с данными, файлами и искусственным интеллектом.
Однако и сам Django содержит много востребованных модулей, программисты даже шутят, «джанго идет с батарейками в комплекте».
Если у вас был опыт с Wordpress, знайте - Django это Wordpress на максималках.
Система ORM - работа с базами данных: SQLite, PostgreSQL, MySQL, MongoDB, GraphQL
Система кэширования - для быстрого переиспользования информации
Система управления пользователями (доступ, права)
Система маршрутизации - обрабатывает ссылки
Админ панель для отображения данных в готовом интерфейсе
Шаблонизатор для быстрого отображения данных в HTML
Система форм для обработки ввода пользователей
Система перехвата запросов на разных этапах (Middleware)
Система защиты от известных атак (CSRF, XSS и SQL-инъекций)
Система сессий и куки - для распознавания пользователя
Система тестирования
Система поддержки многоязычности и форматов
Система для взаимодействия с CSS, JS и изображениями
Система перехвата запросов и ответов
Django работает по принципу MVT (Model-View-Template Модель-Представление-Шаблон).
Простыми словами, есть некая связующая функция View - Представление, которая получает данные из базы через Model - Модель и отправляет их в шаблон Template - Шаблон, для показа пользователю.

Перед установкой Django, требуется убедиться, что на вашем устройстве, установлен python, создана папка проекта и запущено виртуальное окружение.
Вы можете работать в удобном для вас редакторе для примера в Visual Studio Code или Pycharm.
Скачивание и установка Django осуществляется 1 командой.
pip install djangoКоманда скачивания и установки Django
Скачав и установив django, нам теперь требуется создать стартовые файлы проекта.
django-admin startproject main_app .Команда создания файлов проекта

Чтобы посмотреть, что у нас получилось, требуется ввести в консоли команду представленную ниже, после чего проект будет доступен по адресу http://127.0.0.1:8000 .
python manage.py runserverкоманда запуска сервера django на Windows
python3 manage.py runserverкоманда запуска сервера django на MacOS/Linux
Держа весь код в одном месте, спустя время можно запутаться и легко сломать то, что и так хорошо работало.
Потому программисты придумали делить код на отдельные части - приложения.
Создадим новое приложение news - новости в нашем проекте.
python manage.py startapp newsкоманда создания django приложения на Windows
python3 manage.py startapp newsкоманда создания django приложения на MacOS/Linux
news/
│
├── migrations/ ← Папка с файлами миграций базы данных
│ └── __init__.py ← Помечает папку как Python-пакет
│
├── __init__.py ← Помечает приложение как Python-пакет
│
├── admin.py ← Отображение таблиц в панели администратора Django
│
├── apps.py ← Настройки приложения
│
├── models.py ← Описание таблиц базы данных (ORM-модели)
│
├── tests.py ← Тесты для проверки логики приложения
│
└── views.py ← Функции которые обрабатывают запросы
|
└── urls.py ← Маршруты - описание как обрабатывать ссылки (требуется создать файл вручную)Демонстрация файлов приложения Django
После того, как мы создали приложение по схеме выше, нам требуется зарегистрировать его - подключить, чтобы django знал о нем.
Для этого мы переходим в главную папку main_app и в файле settings.py внутриINSTALLED_APPS добавляем новую строку.
INSTALLED_APPS = [
"news.apps.NewsConfig", # Эту строку мы добавляем
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]Так должен выглядеть INSTALLED_APPS после наших изменений
В файл models.py в папке news, добавляем описание нашей будущей таблицы - article (новостные статьи).
В качестве столбцов таблицы мы указываем title - заголовок, content - содержание и created_at - дата и время создания.
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.titleФайл news/models.py
На шаге выше мы создали описание таблицы, теперь же, требуется выполнить создание таблицы в базе данных, для этого в Django используются встроенные миграции.
Миграции состоят из двух этапов.
Первый этап сохраняет слепок изменений файлов models.py.
Второй этап применяет эти изменения в подключенную базу данных.
Так устроено потому, что таблицы очень хрупкий предмет и требуется применять особую осторожность при взаимодействии с ними.
Система миграций django позволяет отслеживать, откатывать назад или редактировать изменения таблиц.
python manage.py makemigrations
python manage.py migrateСоздаем файл миграций и применяем их в базу данных на Windows
python3 manage.py makemigrations
python3 manage.py migrateСоздаем файл миграций и применяем их в базу данных на MacOS / Linux
Чтобы таблица отображалась в админ панели django, нам требуется зарегистрировать ее в файле news/admin.py
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'created_at')
search_fields = ('title',)файл news/admin.py
Чтобы зайти в админ панель django нам требуется создать администратора - супер пользователя.
Внутри django уже существует модель Users - Пользователи, а на шаге выше мы сделали миграции, то есть создали таблицу пользователей в базе данных.
Теперь осталось только создать самого пользователя придумав логин и пароль.
Username (leave blank to use 'User'): lyboe_imya
Email address: luboy@vash_adres.ru
Password: (не будет показывать из-за безопасности даже если введен)
Password (again): (не будет показывать из-за безопасности даже если введен)
# Может показать такое, если пароль слишком простой,
# в реальной разработке такой пароль лучше не вводить,
# но для учебных целей, можете подтвердить внизу вводя y.
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]:Пример отображения диалога создания суперпользователя django
Теперь мы можем зайти в админ панель по адресу http://127.0.0.1:8000/admin/ .
Сперва нас перенаправит в страницу входа, где требуется ввести логин и пароль, которые установили прежде.

Чтобы создать нашу первую запись, требуется нажать + Add в админке напротив Articles (таблицы которую мы создали прежде).


После заполнения новости, требуется нажать кнопку SAVE.

Для отображения созданной новости на странице мы создадим два типа шаблонов.
Первый будет содержать список новостей и показывать только заголовки и ссылки.
Второй будет содержать конкретную новость, показывая заголовок, описание и дату создания.
В шаблонах мы указываем имена тех полей, которые задали прежде в моделях.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Новости</title>
<style>body{font-family:Arial,sans-serif;background:#f5f5f5;color:#333;max-width:800px;margin:40px auto;padding:0 20px}h1{text-align:center;color:#222}div{background:white;padding:15px 20px;margin:15px 0;border-radius:8px;box-shadow:0 2px 6px rgba(0,0,0,.08)}h2{margin:0;font-size:20px}a{color:#1976d2;text-decoration:none}a:hover{text-decoration:underline}p{text-align:center;color:#777}</style>
</head>
<body>
<h1>Список новостей</h1>
{% for article in articles %}
<div>
<h2>
<a href="{% url 'article_detail' article.pk %}">
{{ article.title }}
</a>
</h2>
</div>
{% empty %}
<p>Статей пока нет.</p>
{% endfor %}
</body>
</html>news/templates/news/article_list.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{{ article.title }}</title>
<style>body{font-family:Arial,sans-serif;background:#f5f5f5;color:#333;max-width:800px;margin:40px auto;padding:0 20px}.article{background:white;padding:30px;border-radius:8px;box-shadow:0 2px 6px rgba(0,0,0,.08)}.back{display:inline-block;margin-bottom:20px;color:#1976d2;text-decoration:none}.back:hover{text-decoration:underline}h1{margin-top:0;color:#222}.date{color:#888;font-size:14px;margin-bottom:25px}.content{line-height:1.6;font-size:16px}</style>
</head>
<body>
<a class="back" href="{% url 'article_list' %}">← Назад</a>
<div class="article">
<h1>{{ article.title }}</h1>
<p class="date">{{ article.created_at|date:"d.m.Y" }}</p>
<p class="content">{{ article.content }}</p>
</div>
</body>
</html>news/templates/news/article_detail.html
Чтобы связать models - описание таблиц и templates - шаблоны, нам нужна связывающая функция представление - views.
По аналогии с шаблонами мы создадим 2 функции, одна будет показывать список новостей, а другая только конкретную новость.
В каждой из функции мы обращаемся к базе данных при помощи ORM (безопасный способ использования SQL конструкций), а потом передаем ответ в функцию render - отобрази, которая сформирует HTML.
from django.shortcuts import render, get_object_or_404
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'news/article_list.html', {'articles': articles})
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
return render(request, 'news/article_detail.html', {'article': article})news/views.py
Остался последний пункт, кто-то должен перехватывать переходы по ссылкам, и это маршрутизатор, в джанго маршруты прописываются в файле urls.py.
Создаем такой файл в папке news с содержимым ниже и далее подключаем файл в главный urls.
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]news/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('news/', include('news.urls')), # Это добавляем
]main_app/urls.py
Если все сделано верно, по пути http://127.0.0.1:8000/news/articles/ должны отобразиться все новости, а нажав на первую ссылку, откроется сама новость.


Если вы дошли до этих строк, примите поздравление, это успех!
В случае возникновения вопросов, по обучению, вы можете обратиться за консультацией к программисту.
По необходимости вы можете обратиться за консультацией
Вам может быть интересно

Как работать с XML: редактировать и проверить

Как дополнить файл поставщика для маркетплейса

Почему сложно конвертировать Word 2003 с MathType в PDF

Как открыть XML-файл и посмотреть его в читаемом виде

Почему Django показывает желтый фон и какие-то ошибки
