--- title: 'Задание: DIY Джанго мини блог' slug: Learn/Server-side/Django/django_assessment_blog tags: - Аттестация - Бэкенд - Бэкенд программирование - Джанго - Изучение - Начинающий - блог - скриптовый кодинг translation_of: Learn/Server-side/Django/django_assessment_blog ---
В этом задании вы будете оценивать знания Django, которые вы приобрели в Django Web Framework (Python), чтобы создать очень простой блог.
Предпосылки: | Перед этим заданием, вы должны были проработать все статьи этого модуля. |
---|---|
Задача: | Проверить понимание основ Django, включая конфигурации URL, модели, представления, формы и шаблоны. |
Страницы, которые должны отображаться, их URL-адреса и другие требования, перечислены ниже:
Page | URL | Requirements |
---|---|---|
Home page | / and /blog/ |
Страница индекса, описывающая сайт. |
List of all blog posts | /blog/blogs/ |
Список всех сообщений блога:
|
Blog author (blogger) detail page | /blog/blogger/<author-id> |
Информация для указанного автора (по id) и список постов:
|
Blog post detail page | /blog/<blog-id> |
Сведения о блоге.
|
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> |
Админ-сайт должен быть включен, чтобы разрешить создание / редактирование / удаление сообщений в блогах, авторов блога и комментариев блога (это механизм для создания блогеров в блогах):
|
Кроме того, вы должны написать некоторые базовые тесты для проверки:
__str__()
выдает ожидаемое значение).get_absolute_url()
возвращает ожидаемый URL-адрес).Заметка: Конечно, есть много других тестов, которые вы можете запустить. Используйте на свое усмотрение, но мы ожидаем, что вы сделаете хотя бы тесты выше.
В следующем разделе показаны скриншоты сайта, который выполняет перечисленные выше требования.
Следующий скриншот - пример того, что должна выводить готовая программа.
Это отображает список всех сообщений в блоге (доступны из ссылки "All blogs" на боковой панели). Что нужно отметить:
Это ссылки на всех блогеров в "All bloggers" по ссылке, которая на боковой панели. В этом случае мы можем увидеть на боковой панели, что ни один пользователь не вошел в систему.
Это показывает подробную страницу для конкретного блога.
Обратите внимание, что комментарии имеют дату и время, и расположены в порядке от самых старых до новейших (противоположно порядку ведения блога). В конце у нас есть ссылка для доступа к форме, чтобы добавить новый комментарий. Если пользователь не вошел в систему, мы бы увидели предложение войти в систему.
Это форма добавления комментариев. Обратите внимание, что мы вошли в систему. Когда это удастся, мы должны вернуться к связанной странице блога.
Здесь отображается информация о блогере вместе со списком его блогов.
В следующих разделах описывается, что вам нужно делать.
Этот проект очень похож на LocalLibrary учебник. Вы сможете настроить скелет, поведение входа пользователя / выхода из системы, поддержку статических файлов, представлений, URL-адресов, форм, базовых шаблонов и конфигурации админ-панели, используя почти все те же подходы.
Некоторые общие рекомендации:
get_queryset(self)
для фильтрации (как и в нашем классе библиотеки LoanedBooksAllListView
) и получить информацию об авторе из URL-адреса.get_context_data()
(обсуждается ниже).CreateView
. Если вы используете CreateView
(рекомендуется):
get_context_data()
как обсуждается ниже). form_valid()
функцию, поэтому он может быть сохранен в модели (as described here — Django docs). В этой же функции мы устанавливаем связанный блог. Возможная реализация показана ниже (pk
это идентификатор блога, переданный из URL / URL конфигурации ).
def form_valid(self, form): """ Add author and associated blog to form data before setting it as valid (so it is saved to model) """ #Add logged-in user as author of comment form.instance.author = self.request.user #Associate comment with blog based on passed id form.instance.blog=get_object_or_404(Blog, pk = self.kwargs['pk']) # Call super-class form validation behaviour return super(BlogCommentCreate, self).form_valid(form)
get_success_url()
и «обратный» URL-адрес для исходного блога. Вы можете получить требуемый ID блога, используя self.kwargs
атрибут, как показано в методе form_valid()
выше.Мы кратко говорили о передаче контекста шаблону в представлении на основе классов в теме 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")}}