• Информация на сайте предоставляется «как есть», может содержать неточности и не является консультацией или офертой.
  • Перед использованием проконсультируйтесь со специалистом.

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

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

Настройки cookies
Необходимые для работы веб-сайта

Используются для входа, навигации и защиты (например: sessionid, csrftoken). Без них сайт может работать с перебоями.

Помогают улучшить сайт, собирая статистику посещений (например, через Яндекс Метрику).

Используются для показа персонализированной рекламы и ретаргетинга в рекламных сетях.

Настройки интерфейса

Декоративный эффект свечения при клике по странице.

DEV -
PROGRAM.RU
Контакты

Ваш первый сайт на Django: обзор фреймворка на Python

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

Ваше первое приложение на DJANGO

Слыша «Django» (Джанго), на ум может прийти, фильм - «Джанго освобожденный», или же имя знаменитого гитариста - Джанго Рейнхардт.

В 2005 году фильма не существовало, а среди разработчиков были музыканты, потому теперь у программистов термин Django имеет четкую ассоциацию.

Что такое django

Django часто воспринимают за библиотеку, но на самом деле это бесплатный и открытый фреймворк (код который диктует структуру проекта).

Зачем нужен django

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

Сильные стороны django

Преимущество Django в том, что он написан на популярном языке python, что открывает доступ к многочисленным библиотекам сообщества для работы с данными, файлами и искусственным интеллектом.

Однако и сам Django содержит много востребованных модулей, программисты даже шутят, «джанго идет с батарейками в комплекте».

Если у вас был опыт с Wordpress, знайте - Django это Wordpress на максималках.

Какие батарейки содержит django

  • Система ORM - работа с базами данных: SQLite, PostgreSQL, MySQL, MongoDB, GraphQL

  • Система кэширования - для быстрого переиспользования информации

  • Система управления пользователями (доступ, права)

  • Система маршрутизации - обрабатывает ссылки

  • Админ панель для отображения данных в готовом интерфейсе

  • Шаблонизатор для быстрого отображения данных в HTML

  • Система форм для обработки ввода пользователей

  • Система перехвата запросов на разных этапах (Middleware)

  • Система защиты от известных атак (CSRF, XSS и SQL-инъекций)

  • Система сессий и куки - для распознавания пользователя

  • Система тестирования

  • Система поддержки многоязычности и форматов

  • Система для взаимодействия с CSS, JS и изображениями

  • Система перехвата запросов и ответов

Принцип работы django

Django работает по принципу MVT (Model-View-Template Модель-Представление-Шаблон).

Простыми словами, есть некая связующая функция View - Представление, которая получает данные из базы через Model - Модель и отправляет их в шаблон Template - Шаблон, для показа пользователю.

Django принцип MVT (Model-View-Template Модель-Представление-Шаблон)

Как скачать и установить django

Перед установкой Django, требуется убедиться, что на вашем устройстве, установлен python, создана папка проекта и запущено виртуальное окружение.

Вы можете работать в удобном для вас редакторе для примера в Visual Studio Code или Pycharm.

Скачивание и установка Django осуществляется 1 командой.

pip install django

Команда скачивания и установки Django

Создание файлов проекта

Скачав и установив django, нам теперь требуется создать стартовые файлы проекта.

django-admin startproject main_app .

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

так выглядит проект после введения команды django-admin startproject

Как запустить сервер django проекта

Чтобы посмотреть, что у нас получилось, требуется ввести в консоли команду представленную ниже, после чего проект будет доступен по адресу http://127.0.0.1:8000 .

python manage.py runserver

команда запуска сервера django на Windows

python3 manage.py runserver

команда запуска сервера django на MacOS/Linux

Что такое приложение в django

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

Потому программисты придумали делить код на отдельные части - приложения.

Создадим новое приложение news - новости в нашем проекте.

python manage.py startapp news

команда создания django приложения на Windows

python3 manage.py startapp news

команда создания django приложения на MacOS/Linux

python

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 после наших изменений

Создаем первую таблицу model в django

В файл 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 нам требуется создать администратора - супер пользователя.

Внутри django уже существует модель Users - Пользователи, а на шаге выше мы сделали миграции, то есть создали таблицу пользователей в базе данных.

Теперь осталось только создать самого пользователя придумав логин и пароль.

bash
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/ .

Сперва нас перенаправит в страницу входа, где требуется ввести логин и пароль, которые установили прежде.

Так выглядит страница авторизации django админ панели

Создаем первую запись в админке

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

Для создания новой записи требуется нажать + Add выделенное красным
Пример заполнения новости в Django admin

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

Пример результата создания первой записи Django admin

Создаем шаблоны для статей

Для отображения созданной новости на странице мы создадим два типа шаблонов.

Первый будет содержать список новостей и показывать только заголовки и ссылки.

Второй будет содержать конкретную новость, показывая заголовок, описание и дату создания.

В шаблонах мы указываем имена тех полей, которые задали прежде в моделях.

html
<!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

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

Создаем первое views - представление django

Чтобы связать models - описание таблиц и templates - шаблоны, нам нужна связывающая функция представление - views.

По аналогии с шаблонами мы создадим 2 функции, одна будет показывать список новостей, а другая только конкретную новость.

В каждой из функции мы обращаемся к базе данных при помощи ORM (безопасный способ использования SQL конструкций), а потом передаем ответ в функцию render - отобрази, которая сформирует HTML.

python
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/ должны отобразиться все новости, а нажав на первую ссылку, откроется сама новость.

Пример отображения элементов списка Django
Пример отображения конкретного элемента списка Django

Если вы дошли до этих строк, примите поздравление, это успех!

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

Вам может быть интересно

Поделиться
Ничего не найдено
Найдите нужную страницу

Статьи, инструменты и помощь