Вступление
Если вы следили за нашей серией статей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
Вы увидите веб-страницу, которая выглядит следующим образом:
Далее перейдите по следующему URL:
your-server-ip:8000/post/
Отсюда вы должны увидеть следующее:
Теперь мы проверили, что два файлаurls.py
работают, и данные показывают нам именно то, что мы ожидали. Работая, давайте добавим некоторые реальные данные в наш блог.
[[step-3 -—- create-a-blogpost]] == Шаг 3 - Создайте Blogpost
Теперь, когда вы понимаете основы шаблонов и представлений URL, давайте добавим сообщение в блог и отобразим его на веб-странице вместо текста, который мы жестко запрограммировали в файлы Python.
Мы создадим сообщение через созданную нами страницу администратора. Когда ваш сервер обслуживает приложение Django, с помощью веб-браузера перейдите на страницу администратораBlogsite
по адресу:
your-server-ip:8000/admin/blogsite/
В интерфейсе щелкните ссылку+ Add
, расположенную в строкеPosts
, чтобы начать заполнение базы данных примером сообщения в блоге.
При нажатии на ссылку вы увидите форму ввода, которая выглядит следующим образом:
Всякий раз, когда вы хотите добавить сообщение, вы переходите на эту страницу, чтобы сделать это. Кроме того, вы можете редактировать сообщения с помощью ссылкиChange
.
В форме вы увидите следующие поля:
поле | содержание |
---|---|
|
Добавьте сюда желаемый заголовок сообщения в блоге, например |
|
Это относится к части URL-адреса, которая идентифицирует действительный элемент веб-адреса с удобочитаемыми ключевыми словами. Обычно это происходит из заголовка страницы, поэтому в этом случае мы можем использовать |
|
Это тело вашего сообщения в блоге. Мы просто добавим |
|
В этом поле добавьте свое соответствующее имя или имя пользователя. Мы будем использовать |
Заполните бланк блога, как считаете нужным для тестирования.
После того, как вы добавили пример данных на страницу, нажмите кнопкуSAVE
. Вы получите следующую страницу подтверждения:
Поздравляем! Вы создали свой первый пост в блоге!
Далее, давайте проверим, что он добавил строку, содержащую данные, которые мы добавили в базу данных 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/
Здесь мы увидим изменения, которые мы сделали; страница будет выглядеть примерно так, с текстом, который вы добавили в пост.
Когда вы закончите проверять страницу, нажмитеCTRL + C
в терминале, чтобы остановить выполнение процесса.
Чтобы деактивировать среду программирования, вы можете ввести командуdeactivate
, а затем выйти из сервера.
Заключение
В этом руководстве мы создали представления, сопоставили шаблоны URL и отобразили текст на веб-странице из нашей базы данных постов в блоге.
В следующем руководстве будет рассказано, как сделать это более эстетично, используя HTML для создания Djangotemplates. Пока что эта серия охватывает модели Django и виды Django. Шаблоны являются последней важной частью, когда дело доходит до основания вашего приложения Django.