Как создать представления Django

Вступление

Если вы следили за нашей серией статейDjango Development, значит, вы успешно создали приложение Django, которое позволяет пользователям с правами администратора добавлятьcomments иposts через панель управления пользовательского интерфейса администратора Django. Вы также настроили постоянство данных, используя MySQL и решение объектно-реляционного сопоставления Djangomodels.

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

После того, как вы закончите выполнять шаги этого руководства, ваш сайт блога Django перетащит недавнюю публикацию в URLyour-IP-or-domain/post.

Предпосылки

Это руководство является частью серииDjango Development. Чтобы выполнить точную техническую настройку в этом руководстве, вы должны были сделать следующее:

Однако, если у вас есть существующая настройка Django, вы можете следовать, чтобы лучше понять, как реализовать представления Django.

[[step-1 -—- create-view-functions]] == Шаг 1. Создание функций просмотра

В вашем серверном терминале Ubuntu вам сначала нужно перейти в соответствующий каталог и активировать виртуальную среду Python:

cd ~/my_blog_app
. env/bin/activate

Теперь, когда ваша виртуальная среда активирована, давайте перейдем в каталогblogsite, где мы откроем файл Python и создадим наше первое представлениеfunction.

cd ~/my_blog_app/blog/blogsite

Откройте файл представлений для редактирования, используя nano или текстовый редактор по вашему выбору.

nano views.py

После открытия файла вы должны увидеть код, который выглядит следующим образом:

/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render

# Create your views here.

Мы сохранимimport statement, который импортирует функциюrender() из библиотекиdjango.shortcuts. render() function позволяет нам комбинировать и шаблон, и контекст, чтобы мы могли вернуть соответствующий объектHttpResponse. Имейте это в виду, потому что в каждом написанном нами представлении мы отвечаем за создание, заполнение и возвратHttpResponse.

Далее мы добавим наш первый просмотр, который будет приветствовать пользователей на странице индекса. Мы импортируем функциюHttpResponse() из библиотеки Djangohttp. Используя эту функцию, мы передадим текст, который будет отображаться при запросе веб-страницы.

~/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello, welcome to the index page.')

После этого мы добавим еще одну функцию, которая будет отображать отдельный пост, который мы собираемся создать позже в этом уроке.

~/my_blog_app/blog/blogsite/views.py

...
def individual_post(request):
    return HttpResponse('Hi, this is where an individual post will be.')

Наш последний файлviews.py будет выглядеть так.

~/my_blog_app/blog/blogsite/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-адресов с ними через этот файл конфигурации, чтобы мы могли просматривать созданные страницы.

[[step-2 -—- map-urls-to-views]] == Шаг 2. Сопоставьте URL-адреса с представлениями

Благодаря Django людям относительно удобно создавать собственные URL-адреса для использования со своим приложением. Это делается на чистом Python с использованием файла, обычно называемого вашимURLconf или файлом «конфигурации URL».

Чтобы веб-страница отображалась, Django сначала должен определить корневой модульURLconf для использования, а затем переходит к поискуurlpatterns,list data structure, содержащего все шаблоны URL. Затем Django просматривает каждый шаблон URL, пока не найдет первый, который соответствует. Как только совпадение найдено, Django находит связанное представление, и эта функция представления получает данные, относящиеся к шаблону URL и объектуHttpRequest. Если на любом этапе этого процесса происходит сбой, вместо этого отображаетсяerror-handling view.

Находясь в каталоге~/my_blog_app/blog/blogsite, откройте файлurls.py, также известный как ваш файл URLconf, для редактирования. Мы будем использовать здесь nano для редактирования файла.

nano urls.py

Измените файл так, чтобы он выглядел именно так, со спискомurlpatterns, как показано ниже.

~/my_blog_app/blog/blogsite/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.

Чтобы включить наш URLconfblogsite в наш URLconfblog, нам нужно перейти в этот каталог.

cd ~/my_blog_app/blog/blog

Когда вы окажетесь там, вы можете открыть файл URLconf с помощью nano или другого текстового редактора по вашему выбору.

nano urls.py

В этот файл мы добавим следующие строки, чтобы включить файл/blogsite/urls.py, с которым мы только что работали, который указан во второй строке.

~/my_blog_app/blog/blog/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

Вы увидите веб-страницу, которая выглядит следующим образом:

Django Initial Index Page

Далее перейдите по следующему URL:

your-server-ip:8000/post/

Отсюда вы должны увидеть следующее:

Django Initial Post Page

Теперь мы проверили, что два файлаurls.py работают, и данные показывают нам именно то, что мы ожидали. Работая, давайте добавим некоторые реальные данные в наш блог.

[[step-3 -—- create-a-blogpost]] == Шаг 3 - Создайте Blogpost

Теперь, когда вы понимаете основы шаблонов и представлений URL, давайте добавим сообщение в блог и отобразим его на веб-странице вместо текста, который мы жестко запрограммировали в файлы Python.

Мы создадим сообщение через созданную нами страницу администратора. Когда ваш сервер обслуживает приложение Django, с помощью веб-браузера перейдите на страницу администратораBlogsite по адресу:

your-server-ip:8000/admin/blogsite/

В интерфейсе щелкните ссылку+ Add, расположенную в строкеPosts, чтобы начать заполнение базы данных примером сообщения в блоге.

Django Blogsite Admin Page

При нажатии на ссылку вы увидите форму ввода, которая выглядит следующим образом:

Django Add Post Form

Всякий раз, когда вы хотите добавить сообщение, вы переходите на эту страницу, чтобы сделать это. Кроме того, вы можете редактировать сообщения с помощью ссылкиChange.

В форме вы увидите следующие поля:

поле содержание

Title

Добавьте сюда желаемый заголовок сообщения в блоге, напримерMy First Blog Post.

Slug

Это относится к части URL-адреса, которая идентифицирует действительный элемент веб-адреса с удобочитаемыми ключевыми словами. Обычно это происходит из заголовка страницы, поэтому в этом случае мы можем использоватьmy-first-blog-post.

Content

Это тело вашего сообщения в блоге. Мы просто добавимHello, World! для примера, но здесь вы можете быть подробными.

Author

В этом поле добавьте свое соответствующее имя или имя пользователя. Мы будем использоватьSammy.

Заполните бланк блога, как считаете нужным для тестирования.

Django Filled Out Blog Post Form

После того, как вы добавили пример данных на страницу, нажмите кнопкуSAVE. Вы получите следующую страницу подтверждения:

Django Post Submission Successful

Поздравляем! Вы создали свой первый пост в блоге!

Далее, давайте проверим, что он добавил строку, содержащую данные, которые мы добавили в базу данных MySQL.

[[step-4 -—- display-database-data]] == Шаг 4. Отображение данных базы данных

На этом этапе нам нужно перейти в MySQL, поэтому остановите текущий серверный процесс через терминал, набравCTRL + C, а затем откройте свой интерпретатор MySQL:

mysql -u root

Как только вы окажетесь в командной строке MySQL, перейдите в базу данныхblog_data:

use blog_data;

Затем отобразите содержимое таблицыblogsite_post.

select * from blogsite_post;

Вы получите вывод, подобный следующему, который должен отображать информацию, которую вы добавили в пользовательский интерфейс администратора.

Output+----+--------------------+--------------------+---------------+----------------------------+--------+
| 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 | Sammy  |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)

Как показано в выводе, есть строка с данными для поста, который мы добавили. Теперь давайте отнесем эти данные в функцию просмотра сообщений. ИспользуйтеCTRL + D для выхода из интерпретатора MySQL.

Перейдите в папку с файломviews.py внутри вашего приложенияblogsite.

cd ~/my_blog_app/blog/blogsite

Теперь откройте файл, чтобы мы могли включить наши новые данные.

nano views.py

Отредактируйте файл, чтобы он выглядел точно так, как показано ниже.

~/my_blog_app/blog/blogsite

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/

Здесь мы увидим изменения, которые мы сделали; страница будет выглядеть примерно так, с текстом, который вы добавили в пост.

Django Served Blog Post

Когда вы закончите проверять страницу, нажмитеCTRL + C в терминале, чтобы остановить выполнение процесса.

Чтобы деактивировать среду программирования, вы можете ввести командуdeactivate, а затем выйти из сервера.

Заключение

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

В следующем руководстве будет рассказано, как сделать это более эстетично, используя HTML для создания Djangotemplates. Пока что эта серия охватывает модели Django и виды Django. Шаблоны являются последней важной частью, когда дело доходит до основания вашего приложения Django.

Related