- Короткий опис проекту
- Скріншоти
- Список всіх повідомлень в блозі
- Список всіх блогерів
- Детальна сторінка блогу
- Додати форму коментаря
- про автора
- завершальні кроки
- Поради та підказки
- атестація
У цьому завданні ви будете оцінювати знання 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 знаків
- Інші типи записів можуть використовувати базову реєстрацію.
Крім того, ви повинні написати деякі базові тести для перевірки:
- Всі поля моделі мають правильну мітку і довжину.
- Всі моделі мають очікуване ім'я об'єкта (наприклад, __str __ () видає очікуване значення).
- Моделі мають очікуваний URL для окремих записів в блогах і коментарях (наприклад, get_absolute_url () повертає очікуваний URL-адресу).
- Сторінка BlogListView (сторінка на всіх блогах) доступна в очікуваному місці (наприклад, / blog / blogs)
- Сторінка BlogListView (сторінка на всіх блогах) доступна на очікуваному іменованому URL-адресу (наприклад, 'blogs')
- Сторінка BlogListView (сторінка на всіх блогах) використовує очікуваний шаблон (наприклад, за замовчуванням)
- BlogListView розбиває записи на 5 (по крайней мере, на першій сторінці)
Замітка: Звичайно, є багато інших тестів, які ви можете запустити. Використовуйте на свій розсуд, але ми очікуємо, що ви зробите хоча б тести вище.
У наступному розділі показані скріншоти сайту, який виконує перераховані вище вимоги.
Скріншоти
Наступний скріншот - приклад того, що повинна виводити готова програма.
Список всіх повідомлень в блозі
Це відображає список всіх повідомлень в блозі (доступні із заслання "All blogs" на бічній панелі). Що потрібно відзначити:
- На бічній панелі також списки увійшов в систему користувача.
- Індивідуальні блоги і блогери доступні в вигляді посилань на сторінці.
- Розбивка включена (в групах по 5)
- Показ від нових до старих.
Список всіх блогерів
Це посилання на всіх блогерів в "All bloggers" за посиланням, яка на бічній панелі. У цьому випадку ми можемо побачити на бічній панелі, що жоден користувач не увійшов в систему.
Детальна сторінка блогу
Це показує детальну сторінку для конкретного блогу.
Зверніть увагу, що коментарі мають дату та час, і розташовані в порядку від найстаріших до новітніх (протилежно порядку ведення блогу). В кінці у нас є можливість додати доступу до форми, щоб додати новий коментар. Якщо користувач не увійшов в систему, ми б побачили пропозицію увійти в систему.
Додати форму коментаря
Це форма додавання коментарів. Зверніть увагу, що ми увійшли в систему. Коли це вдасться, ми повинні повернутися до пов'язаної сторінці блогу.
про автора
Тут відображається інформація про блогерів разом зі списком його блогів.
завершальні кроки
У наступних розділах описується, що вам потрібно робити.
- Створіть скелет проекту і веб-додаток для сайту (як описано в Django Tutorial Part 2: Creating a skeleton website ). Ви можете використовувати «diyblog» для імені проекту і «blog» для імені додатки.
- Створюйте моделі для записів в блогах, коментарів і будь-яких інших необхідних об'єктів.
- Кожен коментар буде мати тільки один блог, але блог може мати багато коментарів.
- Пости в блозі і коментарі повинні бути відсортовані за датою поста.
- Не кожен користувач обов'язково буде автором блогу, хоча будь-який користувач може бути коментатором.
- Блог автора також повинен включати інформацію про себе.
- Запустіть міграцію для нових моделей і створіть суперкористувача.
- Використовуйте адмін панель, щоб створити якийсь приклад блогу і коментарі в блогах.
- Створіть уявлення, шаблони, і URL-конфігурації для публікації блогу і списку сторінок блогера.
- Створіть уявлення, шаблони, і URL-конфігурації для публікації блогу і докладних сторінок блогера.
- Додати сторінку з формою для додавання нових коментарів (не забудьте зробити це доступним тільки для зареєстрованих користувачів!)
Поради та підказки
Цей проект дуже схожий на LocalLibrary підручник. Ви зможете налаштувати скелет, поведінка входу користувача / виходу з системи, підтримку статичних файлів, уявлень, URL-адрес, форм, базових шаблонів і конфігурації адмін-панелі, використовуючи майже всі ті ж підходи.
Деякі загальні рекомендації:
- Контрольний аркуш (index page) може бути реалізована в якості основної функції уявлення та шаблону (як і для locallibrary).
- Перегляд списку публікацій блогу та блогерів, а також докладний уявлення для повідомлень в блозі можна створити за допомогою generic list and detail views .
- Список посад в блозі конкретного автора може бути створений за допомогою загального списку Blog list view і фільтрація для об'єкта блогу, відповідає вказаному автору.
- Вам доведеться реалізувати 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)
- Для успішного перенаправлення після перевірки форми вам потрібно буде вказати URL-адресу; це повинен бути оригінальний блог. Для цього вам потрібно буде перевизначити 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! Сподіваємося, вам сподобається цей модуль і ви відчуєте, що у вас є хороше розуміння основ!