--- title: 'Задание: DIY Джанго мини блог' slug: Learn/Server-side/Django/django_assessment_blog tags: - Аттестация - Бэкенд - Бэкенд программирование - Джанго - Изучение - Начинающий - блог - скриптовый кодинг translation_of: Learn/Server-side/Django/django_assessment_blog ---
{{LearnSidebar}}
{{PreviousMenu("Learn/Server-side/Django/web_application_security", "Learn/Server-side/Django")}}

В этом задании вы будете оценивать знания Django, которые вы приобрели в Django Web Framework (Python), чтобы создать очень простой блог.

Предпосылки: Перед этим заданием, вы должны были проработать все статьи этого модуля.
Задача: Проверить понимание основ Django, включая конфигурации URL, модели, представления, формы и шаблоны.

Краткое описание проекта

Страницы, которые должны отображаться, их URL-адреса и другие требования, перечислены ниже:

Page URL Requirements
Home page / and /blog/ Страница индекса, описывающая сайт.
List of all blog posts /blog/blogs/

Список всех сообщений блога:

  • Доступно для всех пользователей из боковой панели.
  • Список отсортирован по дате публикации (от самого нового до самого старого).
  • Список разбит на группы по 5 статьям.
  • Элементы списка отображают название блога, дату публикации и автора.
  • Названия сообщений блога связаны с страницами подробных сведений о блоге.
  • Blogger (имена авторов) связаны с страницами подробных сведений о блоге.
Blog author (blogger) detail page /blog/blogger/<author-id>

Информация для указанного автора (по id) и список постов:

  • Доступен для всех пользователей по ссылкам на автора в сообщениях в блогах и т. Д.
  • Содержит некоторые биографические данные в blogger/author.
  • Список отсортирован по дате добавления (от новых к старым).
  • Не разбит на страницы.
  • Элементы списка отображают только имя сообщения в блоге и дату публикации.
  • Названия блога связаны со страницей блога.
Blog post detail page /blog/<blog-id>

Сведения о блоге.

  • Доступно для всех пользователей из списков блога.
  • Страница содержит сообщение в блоге: имя, автор, дата публикации и содержание.
  • Комментарии к сообщению в блоге должны отображаться внизу.
  • Комментарии должны быть отсортированы по порядку: от старых до самых последних.
  • Содержит ссылку для добавления комментариев на конец для зарегистрированных пользователей (см. Страницу формы комментариев)
  • В блогах и комментариях должен отображаться только обычный текст. Нет необходимости поддерживать какую-либо разметку HTML (например, ссылки, изображения, полужирный / курсив и т. Д.).
List of all bloggers /blog/bloggers/

Список блогеров в системе:

  • Доступный для всех пользователей с боковой панели сайта
  • Имя блогера связано с блогом автора страницы.
Comment form page /blog/<blog-id>/create

Создать комментарий для публикации в блоге:

  • Доступно только зарегистрированным пользователям (только) из ссылки внизу страницы с подробными сведениями блога.
  • Отображает форму с описанием для ввода комментариев (дата публикации и блог недоступны для редактирования).
  • После того, как комментарий будет опубликован, страница будет перенаправлена ​​на связанную страницу блога.
  • Пользователи не могут редактировать или удалять свои сообщения.
  • Вышедшие пользователи будут перенаправлены на страницу входа в систему, чтобы добавить комментарии. После входа в систему они будут перенаправлены на страницу блога, которую они хотели бы прокомментировать.
  • Страницы комментариев должны содержать имя / ссылку на комментарий блога.
User authentication pages /accounts/<standard urls>

Стандартные страницы аутентификации Django для входа, выхода и установки пароля:

  • Вход / выход должен быть доступен через ссылки боковой панели.
Admin site /admin/<standard urls>

Админ-сайт должен быть включен, чтобы разрешить создание / редактирование / удаление сообщений в блогах, авторов блога и комментариев блога (это механизм для создания блогеров в блогах):

  • В админ панеле должен отображаться список комментариев в строке (внизу каждого сообщения в блоге).
  • Имена комментариев в админке создаются усеканием описания комментария до 75 знаков
  • Другие типы записей могут использовать базовую регистрацию.

Кроме того, вы должны написать некоторые базовые тесты для проверки:

Заметка: Конечно, есть много других тестов, которые вы можете запустить. Используйте на свое усмотрение, но мы ожидаем, что вы сделаете хотя бы тесты выше.

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

Скриншоты

Следующий скриншот - пример того, что должна выводить готовая программа.

Список всех сообщений в блоге

Это отображает список всех сообщений в блоге (доступны из ссылки "All blogs" на боковой панели). Что нужно отметить:

List of all blogs

Список всех блогеров

 

Это ссылки на всех блогеров в "All bloggers" по ссылке, которая на боковой панели. В этом случае мы можем увидеть на боковой панели, что ни один пользователь не вошел в систему.

List of all bloggers

Подробная страница блога

Это показывает подробную страницу для конкретного блога.

Blog detail with add comment link

Обратите внимание, что комментарии имеют дату и время, и расположены в порядке от самых старых до новейших (противоположно порядку ведения блога). В конце у нас есть ссылка для доступа к форме, чтобы добавить новый комментарий. Если пользователь не вошел в систему, мы бы увидели предложение войти в систему.

Comment link when not logged in

Добавить форму комментария

Это форма добавления комментариев. Обратите внимание, что мы вошли в систему. Когда это удастся, мы должны вернуться к связанной странице блога.

Add comment form

Об авторе

Здесь отображается информация о блогере вместе со списком его блогов.

Blogger detail page

Завершающие шаги

В следующих разделах описывается, что вам нужно делать.

  1. Создайте скелет проекта и веб-приложение для сайта (как описано в  Django Tutorial Part 2: Creating a skeleton website). Вы можете использовать «diyblog» для имени проекта и «blog» для имени приложения.
  2. Создавайте модели для записей в блогах, комментариев и любых других необходимых объектов.
  3. Запустите миграцию для новых моделей и создайте суперпользователя.
  4. Используйте админ панель, чтобы создать какой-нибудь пример блога и комментарии в блогах.
  5. Создайте представления, шаблоны, и URL-конфигурации для публикации блога и списка страниц блогера.
  6. Создайте представления, шаблоны, и URL-конфигурации для публикации блога и подробных страниц блогера.
  7. Создайте страницу с формой для добавления новых комментариев (не забудьте сделать это доступным только для зарегистрированных пользователей!)

Советы и подсказки

Этот проект очень похож на  LocalLibrary учебник. Вы сможете настроить скелет, поведение входа пользователя / выхода из системы, поддержку статических файлов, представлений, URL-адресов, форм, базовых шаблонов и конфигурации админ-панели, используя почти все те же подходы.

Некоторые общие рекомендации:

  1. Индексная страница (index page) может быть реализована в качестве основной функции представления и шаблона (как и для locallibrary).
  2. Просмотр списка публикаций блога и блогеров, а также подробное представление для сообщений в блоге можно создать с помощью  generic list and detail views.
  3. Список постов в блоге конкретного автора может быть создан с помощью общего списка Blog list view и фильтрация для объекта блога, соответствующего указанному автору.
  4. Форма добавления комментариев может быть создана с использованием функционального представления (и связанной модели и формы) или с использованием общего CreateView. Если вы используете CreateView (рекомендуется):

Мы кратко говорили о передаче контекста шаблону в представлении на основе классов в теме  Django Tutorial Part 6: Generic list and detail views. Для этого вам нужно переопределить get_context_data() (сначала получить существующий контекст, обновить его любыми дополнительными переменными, которые вы хотите передать шаблону, а затем вернуть обновленный контекст). Например, фрагмент кода ниже показывает, как вы можете добавить объект blogger в контекст на основе его BlogAuthor id.

class SomeView(generic.ListView):
    ...

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(SomeView, self).get_context_data(**kwargs)
        # Get the blogger object from the "pk" URL parameter and add it to the context
        context['blogger'] = get_object_or_404(BlogAuthor, pk = self.kwargs['pk'])
        return context

Аттестация

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

После того, как вы завершили этот модуль, вы также закончили весь контент MDN для изучения базового веб-сайта на сервере Django! Надеемся, вам понравится этот модуль и вы почувствуете, что у вас есть хорошее понимание основ!

{{PreviousMenu("Learn/Server-side/Django/web_application_security", "Learn/Server-side/Django")}}

 

В этом модуле