> For the complete documentation index, see [llms.txt](https://valerylinkov2504.gitbook.io/sitepython/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://valerylinkov2504.gitbook.io/sitepython/2.md).

# Часть вторая. Написание страницы и отслеживание URL

Здесь мы напишем страницы на HTML и научимся отслеживать их в проекте

**Цель:** Создать первые страницы и отследить их URL

**Задачи:**

* Создать приложение в проекте
* Создать страницы в приложении проекта
* Отладка сервера проекта

## Небольшой экскурс в историю

Весь интернет работает по одному основному протоколу и ряду дополнительных. Основной протокол – HTTP (от англ. HyperText Transfer Protocol — протокол передачи гипертекста). HTTP – это прикладной протокол передачи данных в сети. На текущий момент используется для получения информации с веб-сайтов. Протокол HTTP основан на использовании технологии «клиент-сервер»: клиент, отправляющий запрос, является инициатором соединения; сервер, получающий запрос, выполняет его и отправляет клиенту результат.

HTTP был предложен в марте 1991 года Тимом Бернерсом-Ли, работавшим тогда в CERN, как механизм для доступа к документам в Интернете и облегчения навигации посредством использования гипертекста. Самая ранняя версия протокола HTTP/0.9 была впервые опубликована в январе 1992 года (хотя реализация датируется 1990 годом).

Шли годы и опасность в интернете росла. С возрастание угроз стало необходимо шифрование. Так появился HTTPS (от англ. HyperText Transfer Protocol Secure — безопасный протокол передачи гипертекста) — это расширение протокола HTTP, поддерживающее шифрование посредством криптографических протоколов SSL и TLS, где SSL и TLS дополнили основной HTTP.

Для работы с HTTP протоколом существует свой язык – HTML. HTML (от англ. HyperText Markup Language — «язык гипертекстовой разметки») — стандартизированный язык разметки документов во Всемирной паутине. Большинство веб-страниц содержат описание разметки на языке HTML (или XHTML). Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства.

Теперь вернёмся к нашему проекту. По возвращению, мы видим новый файл – db.sqlite3. Этот файл появился после запуска сервера. Он – наша база данных и понятно, пока, пустая.

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

Переходим в терминал и пишем команду

```
python manage.py startapp blog
```

Мы создали новую директорию под названием blog. blog – это приложение для нашего проекта сайта «MySite».

## Пишем страницу

Открываем views.py.

![views.py](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxpBNt1v1BSeohFCZZ%2F-MNxpHEI0dZaERPQxb-J%2Fcf530c3f2863e1bf868ed099f82c51c8.png?alt=media\&token=aec396af-a05e-4dc1-90be-26c5ee94770a)

Пишем строку импорта новой библиотеки

```python
from django.http import HttpResponse
```

Напишем простую функцию

```python
def home(request):  
    return HttpResponse('<h2>Привет мир!</h2>')
```

Не забываем про pep8 (руководство по написанию кода на Python). Ссылка на полное руководство:

{% embed url="<https://pythonworld.ru/osnovy/pep-8-rukovodstvo-po-napisaniyu-koda-na-python.html>" %}

Теперь нам нужно её вызвать. Приступим.

В приложении blog создадим файл – `urls.py`. Для этого откроем папку с проектом. В моём случае это C:\Users\Valery\PycharmProjects\MySite\blog. Затем, создаём файл.

Обратимся к автоматически созданному файлу urls.py в папке C:\Users\Valery\PycharmProjects\MySite. Откроем его.

![urls.py](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxpBNt1v1BSeohFCZZ%2F-MNxpHEFCeMipH-XKR7R%2F3b61eeca025d46d0711651ece135f089.png?alt=media\&token=141588f3-2941-4530-ba4b-46388f1cf433)

Построчно разберём код

```python
from django.contrib import admin  
from django.urls import path  

urlpatterns = [  
    path('admin/', admin.site.urls),  
]
```

`from django.contrib import admin` – импорт библиотеки для создание панели администратора сайта.

`from django.urls import path` – импорт библиотеки для создание списка адресов страниц.

```python
urlpatterns = [  
    path('admin/', admin.site.urls),  
]
```

Организация списка url-файлов

Скопируем кусок в C:\Users\Valery\PycharmProjects\MySite\blog\urls.py. Копируем всё, кроме библиотеки на панель администратора. То есть:

```python
from django.urls import path  

urlpatterns = [  
    path('admin/', admin.site.urls),  
]
```

Заменим `path('admin/', admin.site.urls),` на `path('', views.home),`. Результат:

```python
from django.urls import path  

urlpatterns = [  
    path('', views.home),  
]
```

Что мы сделали? Мы вызываем главную страницу нашего проекта, то есть (<http://127.0.0.1:8000/blog/>), а вызов идёт в файл views.py в приложении blog и обращается к функции home, которую мы создали.

Есть только 1 маленькая проблема – фатальная ошибка компиляции. Файл urls.py не «видит» файла views.py. Исправляем:

```python
from . import views
```

`from .` означает, что импорт идёт из корневой для приложения директории, то есть C:\Users\Valery\PycharmProjects\MySite\blog\\.

## Хлебные крошки

Добавим последний штрих – хлебную крошку. Верстальщики называют хлебными крошками – имена ключевых объектов/директорий/файлов и т.п. Хлебные крошки – это навигационная цепочка на сайте. Свой название оно получило по аналогии с немецкой сказкой «Гензель и Гретель», в которой дети, когда их повторно завели в лес, не смогли найти дорогу обратно, так как вместо камешков оставили хлебные крошки, которые впоследствии склевали лесные птицы.

Теперь к делу. Итоговая вёрстка файла urls.py выглядит так:

```python
from django.urls import path  
from . import views  

urlpatterns = [  
    path('', views.home, name='blog-home'),  
]
```

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

Если бы мы сейчас искали приложение blog, мы бы его не нашли. Дело в том, что в urls.py в директории C:\Users\Valery\PycharmProjects\MySite\ указана ссылка только на приложение admin. Исправим это.

```python
from django.contrib import admin  
from django.urls import path, include  

urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('blog/', include('blog.urls')),  
]
```

Мы подключаем ссылку blog и все её url-файлы командой include. Чтобы она работала, мы импортируем её во второй строке.

Запускаем сервер и проверяем.

![Вуаля. Всё сломалось :)](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxpBNt1v1BSeohFCZZ%2F-MNxpHEJfqrPrbw8bA5y%2Ff48de5d7a4f93c21b2f3e58b256bd962.png?alt=media\&token=6ed9cddd-4fe6-4873-ba20-0a4a8b4dbddc)

Так и должно быть, так как на главной странице у нас ничего нет. Перейдём в blog.

![blog](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxpBNt1v1BSeohFCZZ%2F-MNxpHEEDOpqveetZ3tI%2F0d1f33fa8f930ad1eef2a40b825967c1.png?alt=media\&token=ba530da3-31a8-4f31-bccc-e0bba29367c9)

Проверим admin

![admin](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxpBNt1v1BSeohFCZZ%2F-MNxpHEG3ljU9Jn2KOCW%2F7fb9e95d191982c47585d8937f1576d2.png?alt=media\&token=7d8e68b0-9f91-4834-b569-5899220afbf2)

Победа.

## Закрепление

Напишем ещё одну страницу для закрепления. Работаем в директории blog. Переходим в файл viewes.py и в нём пишем ещё одну функцию.

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

Переходим в urls.py. Пишем новую ссылку:

```python
urlpatterns = [  
    path('', views.home, name='blog-home'),  
    path('contacts/', views.contacts, name='blog-contacts'),  
]
```

Теперь у нас будет новый путь: <http://127.0.0.1:8000/blog/contacts>

Переходим на папку вверх в MySite. Заходим в файл urls.py и ничего там не меняем

Почему? Командой include('blog.urls') мы проверяем все ссылки второго уровня.

Запуск сервера. Проверка.

![Контакты](https://4078292694-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNtNPjTNQxUDbrf3v0a%2F-MNxlRSJmMkXkDNTbHzz%2F-MNxlVVZzKXd2OZflWqO%2F16bd5065d45a413495a8001ebe17a9a5.png?alt=media\&token=fd5f24d2-3d18-418f-9c67-a45cc3bfb89c)

Всё работает.
