mage - (об'єкт класу FileBrowseField) обкладинка новини, date_of_publication - (DateTimeField) дата публікації (за умовчанням встановлюється в поточну дату створення) , і text - (TextField) текст новини;
Tags: name - (CharField) назва тега ;: author_name - (CharField) ім'я автора коментаря, text - (TextField) текст коментаря, pub_date - (DateTimeField) дата публікації коментаря, admin_comment - (BooleanField) встановлюється в True адміністратором, якщо він схвалює коментар;
Для реалізації розділу ПОВІДОМЛЕННЯ створюємо ще один додаток messages. Файл models.py для цього додатка буде містити моделі Message і Chat, які дозволятимуть обмінюватися повідомленнями між друзями соціальної мережі.
Модель Message містить два поля sender і recipient (ForeignKey), які посилаються на модель User, і визначають, хто з користувачів відправляє повідомлення, а хто отримує (малюнок 8).
Рисунок 8 - Адміністративна частина моделі Message
Модель Chat служить для об'єднання в один об'єкт всіх об'єктів з моделі Message, у яких одержувач або відправник відповідає полях person1 і person2, які в свою чергу посилаються на модель User (малюнок 9).
Рисунок 9 - Адміністративна частина моделі Сhat
Поле messages - екземпляр класу ManyToManyField і посилається на модель Message. Т. е. Один об'єкт Chat буде посилатися на кілька об'єктів моделі Message.
Так само ці дві моделі будуть містити поля date - дата створення повідомлення (DateTimeField), title - заголовок повідомлення (CharField), message - текст повідомлення (TextField), reader - булевское поле для встановлення, прочитано Чи повідомлення одержувачем чи ні (BooleanField).
Всі моделі представлені у додатку Б в розділах відповідних файлам models.py.
4. Class-Base-View
Весь функціонал сайту був переписаний, використовуючи Class-Base-View (CBV), спосіб опису view за допомогою класів, у зв'язку з наявністю часто використовуваного функціоналу. Щоб не доводилося писати одноманітний код, подібні view описані прямо в коді фреймворку.
У даному проекті як батьківських класів використовуються стандартні класи ListView, DetailView, TemplateView, View, CreateView і MonthArchiveView.
Клас TemplateView дозволяє відображати один шаблон, який ми вказуємо в атрибуті template_name. Що б змінити передаваний в запиті словник зі змінними, необхідно перевизначити метод get_context_data і в ньому додавати в словник context всі необхідні нам аргументи.
Клас ListView забезпечує виведення об'єктів у вигляді списку. В якості основних аргументів використовуються model - для вказівки, з якої моделі ми будемо отримувати об'єкти, template_name - для явного вказівки будь в який шаблон будемо обробляти. Хоча якщо явно не вказувати цей атрибут, Django «обчислить» його з назви об'єкта. В даному випадку, таким «обчисленим» шаблоном буде «APP/MODEL_list.html» - частина «APP» береться з імені додатки, визначального модель, а частина «MODEL» - це просто назва моделі в нижньому регістрі.
Клас DetailView дозволяє отримувати один об'єкт, id якого відповідатиме аргументу pk, який передаватиметься в url. Так само основним аргументом є model, якому ми будемо вказувати нашу модель, з якої потрібно отримати об'єкт.
Клас View уміє викликати свої фунції get (), post () і т.п. залежно від типу запиту, передаючи request.
Клас CreateView здійснює створення нового об'єкта. Основний параметр який нам необхідно вказати так само є model. При генерації форми, якщо нам потрібно що б зберігалися якісь конкретні поля або навпаки виключити непотрібні, використовуються атрибути fields і exclude, яким передаються списки полей.- клас, який дозволяє фільтрувати тільки ті об'єкти, у яких поле, що відповідає за дату створення, відповідає місяцю і році, які передаються в url. Для цього використовуються атрибути date_field і queryset.
5. Логічна частина програми та відображення даних на сторінках
Тепер приступимо до реалізації функціоналу наших сторінок.
Головна сторінка сайту буде являти собою сторінку профілю користувача, де будуть розміщені його контактні дані, новинну стрічку поточного користувача, з можливістю додавати нові новини, і форму для викладання документів та список для їх скачування (малюнок 10).
Для цього створимо клас ProfileView, який буде успадковуватися від класу CreateView. Але у зв'язку з тим, що на сторінці буде виконуватися безліч дій, необхідно поміняти поведінку view, які описую...