Программа курса:

1.1 - Как работает интернет и веб-сайты 1.2 - Краткий конспект по HTML 1.3 - Кратко о SQL
2.1 - Что такое Django? 2.2 - Основные принципы MVC 2.3 - Установка Django и создание проекта HelloWorld 2.4 - Диспетчер URL, часть 1. 2.5 - Диспетчер URL, часть 2. 2.6 - Шаблоны, часть 1. 2.7 - Шаблоны, часть 2. 2.8 - Введение в тестирование приложений
3.1 - Создание проекта, первые модели и админ-панель 3.2 - Модели в Django и их поля 3.3 - Первые ORM запросы CRUD 3.4 - Организация связей между таблицами 3.5 - Django ORM методы возвращающие QuerySet 3.6 - Django ORM методы которые не возвращают QuerySet 3.7 - Django ORM поисковые поля и агрегатные функции 3.8 - Views/Templates/URLs
4.1 - Формы в Django 4.2 - CRUD проект
5.1 - Создание проекта и приложения 5.2 - Создание моделей данных блога 5.3 - Сайт администрирования 5.4 - Работа с наборами запросов QuerySet и менеджерами 5.5 - Разработка представлений списка и детальной информации 5.6 - Создание шаблонов представлений 5.7 - Итоги работы
6.1 - Работа с URL 6.2 - Добавление постраничной разбивки 6.3 - Разработка представлений на основе классов 6.4 - Рекомендация постов по электронной почте 6.5 - Создание системы комментариев 6.6 - Добавление функциональности тегирования 6.7 - Извлечение постов по сходству 6.8 - Реализация конкретно-прикладных шаблонных тегов и фильтров 6.9 - Добавление карты сайта 6.10 - Установка базы данных PostgreSQL 6.11 - Добавление полнотекстового поиска в блог
7.1 - Введение в пользовательскую систему Django 7.2 - Использование системы аутентификации Django 7.3 - Доработки системы авторизации и регистрации добавление сессий 7.4 - Профили пользователей и пользовательские поля модели User 7.5 - Авторизация через социальные сети посредством OAuth 2.0 7.6 - Улучшаем дизайн блога с использованием Bootstrap 5 7.7 - Итоги работы
8.1 - Введение в REST API 8.2 - Django REST Framework на примере блога 8.3 - Сериализаторы 8.4 - Представления 8.5 - Фильтрация и поиск 8.6 - Пагинация 8.7 - Права доступа и токены в DRF 8.8 - Схемы и документация 8.9 - Итоги работы
9.1 - Покупка VPS, доменного имени, привязка DNS и настройка по SSH. 9.2 - Установка виртуального окружения Gunicorn и списка зависимостей 9.3 - Установка PostgreSQL, настройка и перенос БД 9.4 - Установка и настройка NGINX 9.5 - Получение SSL сертификата от Lets Encrypt и настройка HTTPS
10.1 - Начало работы, создание модели статей 10.2 - Создание древовидной модели категорий 10.3 - Представления на основе классов 10.4 - Работа с ListView, вывод списка статей 10.5 - Работа с DetailView, форматирование и обработка кириллицы в Slug 10.6 - Вывод дерева категорий, пагинация, добавление Bootstrap 5 10.7 - Оптимизация SQL запросов и установка Debug-Toolbar 10.8 - Профили пользователей. Модели и сигналы 10.9 - Профили пользователей. Представления и формы. 10.10 - Работа с CreateView. Добавление записей пользователями. 10.11 - Работа с UpdateView. Обновление записей пользователями. 10.12 - Использование миксинов в работе с представлениями Django 10.13 - Доработки системы авторизации и регистрации 10.14 - Итоги работы
11.1 - Создание древовидных комментариев 11.2 - Создание древовидных комментариев, добавление JavaScript 11.3 - Добавление функциональности тегирования 11.4 - Добавление ReCAPTCHA для форм 11.5 - Интеграция WYSIWYG-редактора, установка CKEditor 5 11.6 - Создание системы Like/Dislike 11.7 - Добавление RSS ленты для блога 11.8 - Кеширование и Middleware для получения статуса пользователей 11.9 - Свои шаблоны для страниц ошибок 403, 404 11.10 - Итоги работы

Регулярные выражения в маршрутах Django

 

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

Основные символы:

  • . (точка): Соответствует любому одному символу (кроме новой строки).
  • ^: Соответствует началу строки.
  • $: Соответствует концу строки.
  • *: Соответствует нулю или более повторениям предшествующего символа или группы.
  • +: Соответствует одному или более повторениям предшествующего символа или группы.
  • ?: Соответствует нулю или одному повторению предшествующего символа или группы.
  • {}: Указывает количество повторений предшествующего символа или группы. Например, {3} — три повторения, {3,} — три или более, {3,5} — от трех до пяти.
  • []: Указывает набор символов. Например, [abc] — a, b или c; [a-z] — любая строчная буква; [^abc] — любой символ, кроме a, b и c.
  • |: Альтернатива. Например, cat|dog — соответствует “cat” или “dog”.
  • (): Группирует выражения. Например, (ab){2} — соответствует “abab”.
  • \: Экранирует специальные символы. Например, \. соответствует точке, \* соответствует звездочке.
  • \d: Соответствует любой цифре (0-9).
  • \D: Соответствует любому символу, кроме цифры.
  • \s: Соответствует любому пробельному символу (пробел, табуляция, новая строка).
  • \S: Соответствует любому символу, кроме пробельного.
  • \w: Соответствует любой букве, цифре или подчеркиванию.
  • \W: Соответствует любому символу, кроме буквы, цифры или подчеркивания.


Именованные группы:

(P<name>pattern): Создает именованную группу с именем name, которая соответствует pattern. Это может быть использовано для извлечения параметров пути.

Ниже приведены примеры регулярных выражений для определения паттернов URL и соответствующие им URL-адреса. Обратите внимание, что эти примеры предназначены для иллюстрации и могут потребовать модификации в зависимости от конкретных требований вашего приложения. Также важно помнить, что в современных версиях Django предпочтительнее использовать path() с конвертерами, а не re_path().

Примеры с использованием именованных групп:

Регулярное выражениеURL-адресОписание
^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$/articles/2024/03/15/Извлекает год, месяц и день из URL.
^products/(?P<category>\w+)/(?P<slug>[\w-]+)/$/products/electronics/my-product/, /products/clothing/new-dress/Извлекает категорию и slug продукта.
^users/(?P<username>\w+)/$/users/john_doe/, /users/jane_123/Извлекает имя пользователя (буквы, цифры, подчеркивание).
^blog/(?P<pk>\d+)/$/blog/123/, /blog/456/Извлекает первичный ключ (целое число).


Примеры без именованных групп (менее предпочтительны):

Регулярное выражениеURL-адресОписание
^articles/\d{4}/\d{2}/\d{2}/$/articles/2024/03/15/Соответствует URL с датой, но не извлекает значения.
^products/\w+/[\w-]+/$/products/electronics/my-product/Соответствует URL, но не извлекает значения.
^contact/(email|phone)/$/contact/email/, /contact/phone/Соответствует URL, но не извлекает значения.


Рекомендации:

  • Используйте именованные группы: Они делают ваш код более читаемым и позволяют легко извлекать значения из URL-адреса.
  • Будьте конкретными: Избегайте использования слишком общих регулярных выражений (например, .+), которые могут случайно соответствовать нежелательным URL-адресам.
  • Проверяйте валидацию: После извлечения значений из URL-адреса, убедитесь, что они валидны перед их использованием.
  • Используйте конвертеры Django: Вместо re_path, используйте path с конвертерами Django (например, <int:pk>, <str:slug>) для более чистого и поддерживаемого кода.

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

 

Передача значений в функцию

Нами были рассмотрены все параметры функций path() и re_path(), кроме параметра kwargs, который позволяет передать в представление дополнительные значения. Например, если мы перепишем код функции about(), которая содержится в файле views.py, на следующий:

from django.http import HttpResponse


def index(request):
    return HttpResponse('<h2>Главная</h2>')


def about(request, name, age):
    return HttpResponse(f'''
        <h2>О пользователе</h2>
        <p>Имя: {name}</p>
        <p>Возраст: {age}</p>
    ''')


def contact(request):
    return HttpResponse('<h2>Контакты</h2>')

 


Теперь функция about() будет принимать два дополнительных параметра: name и age (имя и возраст пользователя) и отправлять их значения пользователю вместе с остальным контентом.

Чтобы передать значения этих параметров из маршрута, изменим код в файле urls.py следующим образом:

from django.urls import path, re_path
from blog import views

urlpatterns = [
    path('', views.index),
    path('about/', views.about, kwargs={"name": "Tom", "age": 38}),
    re_path(r'^contact/', views.contact),
]

 


Теперь функция path() будет передавать в функцию about() параметры name и age, значения которых будут извлекаться из словаря kwargs.

Если мы выполним запрос по URL-адресу /about/, который будет обработан функцией about(), то мы увидим в браузере соответствующий ответ:

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

Перейти к следующему шагу

Возникли вопросы при прочтении лекции? Задайте вопрос в комментариях

Комментарии