Если бы меня спросили, 25 лет назад, на чём делать сайт - я бы не задумываясь ответил - HTML. 10 лет назад - php, 5 лет назад - joomla/wordpress. А сейчас я бы задумался и спросил с какой целью создаётся сайт.
Для сайта-блога, наверное и по сей день актуальны движки Joomla и WordPress, написанные на PHP. А вот для специфических задач всё чаще и чаще используется Python. Их много: Jango, Pyramid, TurboGears... боюсь, все не перечислить. Почему питон для web-разработки становится популярнее php однозначно сказать трудно. Мне кажется всё дело в модульности. Для php тоже есть модули, но они, во-первых устанавливаются только админом сервера, а во-вторых для их написания нужен достаточно высокий порог вхождения. В python же просто модули и писать и устанавливать - для своего пользователя, не имея при этом рутовых прав.
Итак, Django. Выбран он был только по причине популярности. И вполне возможно, что для какой-то конкретной задачи лучше подойдёт другой конкретный фреймворк.
Здесь собраны некоторые ссылки и заметки, которые могут пригодиться при начальном знакомстве с Django
Django
Джанго - веб-сервер на питоне. При создании проекта, там нет ничего, даже CMS. Есть только админская панель с возможностью управлять пользователями. Django состоит из приложений. По сути, приложение - это директория с фиксированной структурой (в model.py находятся все классы моделей, view.py - визуальные представления, urls.py - настройки url-адресации, и т.д.)
Как ставить Django
Джанго лучше всего ставить через pip install django. Даже если вы пользуетесь, к примеру, Ubuntu Linux, и django доступен из коробки через apt install django - так лучше не делать - скорее всего установится старая версия django. Вы создадите в ней проект, а потом возникнут проблемы с переносом проекта под более свежую версию. Лучше сразу ставить самую свежую версию django через pip install django. Даже на веб-сервере.
Туториалы
Изучение лучше всего начинать с пошаговых примеров. Как раз тут рассказывается как с нуля написать своё приложение для Джанго.
- Самый очевидный туториал - это туториал с официального сайта. Здесь в качестве примера предлагают создать простой опрос. Туториал покрывает все необходимые базовые знания.
- Альтернативный туториал предлагается на сайте Мозиллы. Он гораздо сложнее, чем официальный туториал, но я советую для экономии времени пройти именно его. Как бы не был хорош базовый туториал, при выходе за рамки учебной задачи - всё-равно придётся искать информацию где-то ещё. Туториал от Mozilla даёт больший начальный запас знаний.
Где искать готовые приложения
Django Packages - каталог приложений для Джанго, удобно рассортированных по категориям.
Памятка команд
- python manage.py runserver - запуск сервера. По умолчанию адрес 127.0.0.1:8000
- python manage.py startapp <имя приложения> - создание нового приложения
- python manage.py makemigrations <имя приложения> - Создать после изменения или создания модели файл скрипт миграции, который обновит базу данных.
- python manage.py migrate - применить все обновления БД (созданные ранее файлы миграций)
Локализация, перевод и интернационализация
Про локализацию очень хорошо расписано в этой статье.
Здесь же в виде краткого конспекта.
Локализация шаблонов
В начале файла шаблона необходимо подключить библиотеку локализации:
{% load i18n %}
Дальше локализация выполняется вызовом trans:
<h1>{% trans 'TemplateQuarryList' %}</h1>
локалицация view
По-хорошему, все строковые константы, должны выносится в файл шаблона. Т.е. при правильном написании view, локализировать там будет нечего.
локализация модели
Для локализации имени модели надо добавить туда класс Meta. Предварительно надо не забыть импортировать ugettext_lazy
from django.utils.translation import ugettext_lazy as _
class Book(models.Model):
class Meta:
verbose_name = _('bookModel')
verbose_name_plural = _('bookModel')
В классе задаются имена для единственного и множественного числа.
Почему "bookModel" а не просто "book"? Такой подход поможет потом сэкономить кучу нервов, когда окажется, что в разных контекстах одно и то же английское слово переводится по-разному.
Поля модели переводятся также, по аналогии:
from django.utils.translation import ugettext_lazy as _
class Book(models.Model):
date = models.DateTimeField(_('bookPublished'))
Непосредственно сам перевод
Для генерации файла перевода, в каталоге со своим приложением нужно:
- Создать директорию locale
- Запустить:
django-admin makemessages -l ru
Появится файл locale/ru/LC_MESSAGES/djago.po
Открываем его и добавляем перевод на руский.
Проверяем - не работает! Да, надо скомпилировать файл перевода. Выполняем в корне джанго:
django-admin compilemessages
Авторизация во фронтенде
Собственно, всё рассказывается в туториале от Мозиллы. Вот ссылка на конкретную страницу.
Ещё про систему аутентификаци можно почитать в официальной документации.
Формы
Если у вас простая форма, которая заполняет поля модели и отправляет их по кнопке - HTML код для формы можно не писать.
Можно создать форму, в которой указать тип полей, как указано тут. Можно добавлять и поля которых нет в модели.
Менее универсальный вариант - сделтать форму из модели. Тут даже поля указывать не надо - форма сама возьмёт все поля модели и сделает из этого HTML-форму.
Развёртывание django на сервере
Можно, конечно запустить джанго как это делалось для дебага:
python3 manage.py runserver 127.0.0.1:8000
Но это является в корне неправильным, не оптимизированным и не безопасным. Правильный путь - запускать через UWSGI интерфейс.
Вот статья как запускать Nginx + uwsgi + django. От себя лишь замечу, что надо не забывать выставлять у файлов и директории проекта пользователя www-data. В противном случае долго придётся разбираться с ошибкой от недостатка прав при создании файла сокета.