Создание видов в Django

Если вы следовали мануалам по разработке в Django, вы успешно создали приложение Django, которое позволяет пользователям с правами администратора добавлять комментарии и посты через панель управления. Вы также обеспечили постоянство данных, используя MySQL и модели Django.

В этом мануале вы научитесь создавать виды Django, которые позволят веб-приложению правильно обрабатывать запросы и возвращать требуемые ответы в Интернете. Согласно документам Django, веб-ответ может быть HTML-контентом веб-страницы, перенаправлением или ошибкой HTTP (например, 404). Код для функций видов технически может находиться в любом месте вашего проекта, если он присутствует в пути Python. Однако существуют некоторые соглашения об именовании и размещении файлов, и мы будем следовать этим методам.

В результате ваш блог Django (блог) выведет последний пост по URL-адресу your-IP-or-domain/post.

Требования

Этот мануал является частью серии по разработке 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.

Tags: ,