Если вы следовали мануалам по разработке в Django, вы успешно создали приложение Django, которое позволяет пользователям с правами администратора добавлять комментарии и посты через панель управления. Вы также обеспечили постоянство данных, используя MySQL и модели Django.
В этом мануале вы научитесь создавать виды Django, которые позволят веб-приложению правильно обрабатывать запросы и возвращать требуемые ответы в Интернете. Согласно документам Django, веб-ответ может быть HTML-контентом веб-страницы, перенаправлением или ошибкой HTTP (например, 404). Код для функций видов технически может находиться в любом месте вашего проекта, если он присутствует в пути Python. Однако существуют некоторые соглашения об именовании и размещении файлов, и мы будем следовать этим методам.
В результате ваш блог Django (блог) выведет последний пост по URL-адресу your-IP-or-domain/post.
Требования
Этот мануал является частью серии по разработке Django. Чтобы получить правильную среду в этом руководстве, вы должны были выполнить эти мануалы:
- Установка Django в Ubuntu и Debian (помогает установить Django и настроить среду разработки).
- Создание приложения Django и подключение к базе данных
- Создание моделей в Django
- Подключение интерфейса администратора Django
Однако если у вас есть своя установка Django, вы можете работать с ней, чтобы научиться создавать виды Django.
1: Создание функций видов
Сначала нужно перейти в соответствующий каталог и активировать свою виртуальную среду Python в терминале сервера Ubuntu:
cd ~/my_blog_app
. env/bin/activate
Теперь, когда виртуальная среда включена, перейдите в каталог blogsite, откройте файл Python и создайте первую функцию вида.
Читайте также: Определение функций в Python 3
cd ~/my_blog_app/blog/blogsite
Откройте файл views для редактирования, используя текстовый редактор.
nano views.py
В файле вы должны увидеть код, который выглядит так:
from django.shortcuts import render
# Create your views here.
Оставьте оператор import, который импортирует функцию render() из библиотеки django.shortcuts. Функция render() позволяет комбинировать шаблон и контекст, чтобы вернуть соответствующий объект HttpResponse. Помните об этом, потому что каждый созданный вами вид отвечает за создание, заполнение и возврат HttpResponse.
Читайте также: Импорт модулей в Python 3
Затем добавьте первый вид, который будет приветствовать пользователей на индексной странице. Импортируйте функцию HttpResponse() из библиотеки http. Используя эту функцию, вы сможете передать текст, который будет отображаться при запросе веб-страницы.
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello, welcome to the index page.')
После этого нужно добавить еще одну функцию, которая отобразит отдельный пост (его мы создадим позже).
...
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')
В результате файл views.py выглядит так:
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
return HttpResponse('Hi, this is where an individual post will be.')
Сохраните и закройте файл.
На данный момент функции не указывают на конкретный URL-адрес, поэтому вам нужно добавить его в блок urlpatterns в конфигурационном файле URL. Добавив виды, свяжите их с URL-адресами через этот файл, чтобы пользователи могли просматривать страницы, которые вы создали.
2: Сопоставление URL-ов с видами
Django делает создание собственных URL-адресов относительно простой задачей. Это делается в Python, в файле URLconf.
Чтобы показать веб-страницу, Django сначала должен определить корневой модуль URLconf, затем найти urlpatterns, список, содержащий все шаблоны URL-ов.
Читайте также: Работа со списками в Python 3
Затем Django просматривает каждый шаблон URL, пока не найдет первый, который соответствует. Как только совпадение найдено, Django находит связанный с ним вид, и эта функция вида получит данные, относящиеся к шаблону URL и объекту HttpRequest. Если во время этого процесса в какой-либо точке произошел сбой, вместо него отображается вид обработки ошибок.
В каталоге ~/my_blog_app/blog/blogsite откройте файл urls.py (это и есть URLconf).
nano urls.py
Отредактируйте файл таким образом:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('post/', views.individual_post, name='individual_post')
]
Сохраните и закройте его.
Обновив файл URLconf каталога blogsite, вы должны включить его в URLconf каталога blog, иначе он не будет распознаваться. Мы должны сделать это, потому что он определяется как ROOT_URLCONF. Это означает, что Django просматривает URLconf каталога blog, чтобы найти шаблоны urlpatterns.
Чтобы включить файл URLconf из каталога blogsite в файл URLconf каталога blog, перейдите в этот каталог:
cd ~/my_blog_app/blog/blog
Откройте файл URLconf с помощью nano или другого текстового редактора.
nano urls.py
В файл нужно добавить следующие строки, чтобы включить файл /blogsite/urls.py:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blogsite.urls'))
]
Сохраните и закройте файл.
Теперь откройте веб-браузер и перейдите по URL-адресам, которые вы создали, чтобы убедиться, что они отображают текст, который вы добавили в виды. Чтобы получить доступ к файлу manage.py, который обслуживает приложение Django, нужно перейти в родительский каталог:
cd ..
Выполните следующую команду, указав свой IP:
python manage.py runserver your-server-ip:8000
Откройте URL в браузере:
your-server-ip:8000
Вы увидите страницу с таким текстом:
Hello, welcome to the index page.
Теперь откройте этот URL:
your-server-ip:8000/post/
Вы увидите:
Hi, this is where an individual post will be.
Вы убедились, что файлы urls.py работают правильно.
3: Создание поста для блога
Теперь, когда вы понимаете основы работы шаблонов URL-ов и видов, добавьте в блог новый пост, который будет отображаться на странице вместо текста, который вы жестко закодировали в файле Python.
Создайте пост через созданную вами ранее страницу администратора. Используйте веб-браузер, чтобы перейти на страницу Blogsite:
your-server-ip:8000/admin/blogsite/
В интерфейсе кликните + Add в строке Posts, чтобы добавить в БД тестовый пост.
После этого вы увидите форму ввода, которая выглядит так:
Add Post
Title:
Slug:
Content:
Author:
Эта страница используется для создания всех постов в блоге. Кроме того, вы можете редактировать сообщения с помощью ссылки Change.
Поле |
Значение |
Title |
Добавьте сюда заголовок поста, например My First Blog Post. |
Slug |
Это часть URL-а с человекочитаемыми ключевыми словами. Как правило, она создается из названия страницы, поэтому в этом случае можно использовать my-first-blog-post. |
Content |
Это тело поста. Для тестирования достаточно будет фразы Hello, World!. но в реальных ситуациях сюда можно добавить гораздо больше текста. |
Author |
В этом поле нужно указать имя автора (в мануале это 8host). |
Заполните форму.
Нажмите SAVE. Вы увидите страницу подтверждения.
The post “Post object (1)” was added successfully
Вы создали свой первый пост.
4: Отображение данных БД
Теперь нужно открыть MySQL. Остановите текущий процесс сервера через терминал, набрав CTRL+C, затем откройте свой интерпретатор MySQL:
mysql -u root
В командной строке MySQL перейдите в базу данных blog_data:
use blog_data;
Отобразите содержимое таблицы blogsite_post:
select * from blogsite_post;
Вы получите примерно такой вывод, который должен отображать информацию, добавленную через пользовательский интерфейс администратора.
+----+--------------------+--------------------+---------------+----------------------------+--------+
| id | title | slug | content | created_on | author |
+----+--------------------+--------------------+---------------+----------------------------+--------+
| 1 | My First Blog Post | my-first-blog-post | Hello, World! | 2018-04-24 17:10:00.139735 | 8host |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)
В выводе есть строка с данными для поста, который вы добавили. Теперь нужно сослаться на эти данные в функции вида. Используйте CTRL+D для выхода из интерпретатора MySQL.
Перейдите к каталогу, где хранится файл views.py:
cd ~/my_blog_app/blog/blogsite
Откройте файл:
nano views.py
Отредактируйте его, чтобы он выглядел так:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
def index(request):
return HttpResponse('Hello, welcome to the index page.')
def individual_post(request):
recent_post = Post.objects.get(id__exact=1)
return HttpResponse(recent_post.title + ': ' + recent_post.content)
В приведенном выше коде появился дополнительный оператор import для Post. Также вы удалили условную строку из HttpResponse и заменили ее данными из поста в блоге. Чтобы сослаться на данные конкретного объекта, используется идентификатор поста, связанный с объектом, который нужно отобразить. Этот идентификатор хранится в переменной recent_post. Затем можно указать определенные поля этого объекта через двоеточие.
После того, как вы сохранили и закрыли файл, перейдите в папку с файлом manage.py, чтобы запустить приложение Django.
cd ~/my_blog_app/blog
python manage.py runserver your-server-ip:8000/post/
В браузере откройте ссылку:
your-server-ip:8000/post/
На экране вы должны увидеть свой новый пост.
Чтобы остановить процесс, нажмите CTRL+C.
Чтобы отключить среду разработки, введите команду deactivate, а затем выйдите с сервера.
Заключение
В этом мануале вы создали виды, связали шаблоны URL и отобразили на веб-странице текст из базы данных блога.
В следующем мануале вы узнаете, как сделать блог красивее, используя HTML для создания шаблонов Django. Шаблоны – последняя важная часть в разработке приложения Django.