Вас попросили создать веб-приложение для проведения опросов. Вы, как человек новатор, решили сделать его на веб-фреймворке Django.
2. Проголосовав, пользователь должен увидеть число голосов по каждому ответу.
Backend:
1. Создание опроса через админку.
2. У каждого опроса должна быть дата публикации.
3. Каждый опрос может иметь N вариантов ответа.
4. Число проголосовавших по каждому ответу можно задавать вручную.
1.2. Мы можем создать таблицы в БД вручную, но зачем? Ведь у нас есть Django! Его особенность состоит в том, что таблицы он создает сам на базе кода python. На следующем этапе мы напишем код моделей.
1.3. Очень важно настроить переменные среды вашей операционной системы. В Windows 7 переменная среды path настраивается через Панель управления - Система и безопасность - Система - Дополнительные параметры системы - Переменные среды.
Далее выбираем переменную Path и добавляем
Это в том случае, если у вас Python установлен по адресу C:\Python27 и Django установлен в папке C:\django
На этом этап подготовки заканчивается, и мы приступаем к написанию кода.
Примечание: По умолчанию текст файлов Django имеет кодировку ANSI. Чтобы избежать проблем с русскими символами, рекомендуется сменить кодировку используемых файлов на UTF-8. В Notepad++ это можно сделать командой "Кодировки" - "Преобразовать в UTF-8 (без BOM)".
Также обратите внимание на класс Meta, включенный в каждый класс модели. Из названия понятно, что этот класс содержит мета-данные о классе (описательного характера). В нашем случае это русское название модели в административном интерфейсе - для единственного и множественного числа.
Заказчик выслал вам скриншот того, что он хочет получить.
Требования:
Frontend:
1. На странице отображать панель проводимого в данный период голосования.2. Проголосовав, пользователь должен увидеть число голосов по каждому ответу.
Backend:
1. Создание опроса через админку.
2. У каждого опроса должна быть дата публикации.
3. Каждый опрос может иметь N вариантов ответа.
4. Число проголосовавших по каждому ответу можно задавать вручную.
Этап
1. Подготовка
1.1. Нам нужно разобраться с тем,
как мы будем хранить данные. В одной таблице? В двух? Какова структура таблиц?
Нарисуйте возможную схему таблиц базы данных на листе бумаги. Вот что у нас
получилось:
1.2. Мы можем создать таблицы в БД вручную, но зачем? Ведь у нас есть Django! Его особенность состоит в том, что таблицы он создает сам на базе кода python. На следующем этапе мы напишем код моделей.
1.3. Очень важно настроить переменные среды вашей операционной системы. В Windows 7 переменная среды path настраивается через Панель управления - Система и безопасность - Система - Дополнительные параметры системы - Переменные среды.
Далее выбираем переменную Path и добавляем
C:\python27;C:\django\django\bin
Это в том случае, если у вас Python установлен по адресу C:\Python27 и Django установлен в папке C:\django
На этом этап подготовки заканчивается, и мы приступаем к написанию кода.
Этап
2. Написание кода
моделей
Создадим проект firstsite, а в нем – приложение polls.
Полный перечень операций в командной строке приведен на рисунке.
2.1. Откройте cmd.exe (Командная строка для Windows). Перейдите в
директорию, где будете создавать свой проект:
cd C:\projects
2.2. Создайте проект firstsite в этой
директории:
django-admin.py startproject
firstsite
2.3. Перейдите в директорию созданного проекта:
cd firstsite
2.4. Создайте там приложение polls:
python manage.py startapp
polls
Создание приложения polls в командной строке
Если все было сделано верно, то вы увидите в папке firstsite файлы вашего проекта:
Теперь приступим к созданию моделей в файле polls/models.py:
Структура файлов проекта firstsite
Теперь приступим к созданию моделей в файле polls/models.py:
# -*- coding:utf-8 -*- import datetime from django.db import models class Question(models.Model): """Вопрос""" title = models.CharField(max_length=200, verbose_name = "Вопрос") date_published = models.DateTimeField(verbose_name = "Дата публикации", default = datetime.datetime.now()) is_active = models.BooleanField(verbose_name = "Опубликован") def __unicode__(self): return self.title class Meta: verbose_name = 'Вопрос' verbose_name_plural = 'Вопросы' class Answer(models.Model): """Вариант ответа на вопрос""" question_id = models.ForeignKey(Question) answer = models.CharField(max_length=200, verbose_name = "Ответ") votes = models.IntegerField(verbose_name = "Голосов", default = 0) def __unicode__(self): return self.answer class Meta: verbose_name = 'Ответ' verbose_name_plural = 'Ответы'
Примечание: По умолчанию текст файлов Django имеет кодировку ANSI. Чтобы избежать проблем с русскими символами, рекомендуется сменить кодировку используемых файлов на UTF-8. В Notepad++ это можно сделать командой "Кодировки" - "Преобразовать в UTF-8 (без BOM)".
Классы названы в единственном
числе, т.к. они характеризуют сущность, на основе которой будут создаваться
объекты: Question – вопрос, Answer – ответ. Это общепринятый
стандарт, которому нужно следовать.
verbose_name = "Вопрос" – так
будет называться поле question в админке.
max_length=200 – предельно допустимое число символов в поле.
default – позволяет
задавать значение поля по умолчанию
Один вопрос может иметь много вариантов ответа, следовательно перед нами связь "один-ко-многим". Эта
связь в Django реализуется выражением:
question_id = models.ForeignKey(Question)
Эта строка означает, что в создаваемой
таблице поле question_id будет
внешним ключом таблицы Question.
Если вы используете версию Pytnon 2.x, то для каждого класса обязательно использовать функцию __unicode__(self),
которая позволяет вернуть объект в формате unicode. Лучше будет, если эта функция
будет возвращать один-два элемента класса, например в классе Answer:
def __unicode__(self):
return self.answer
Здесь функция возвращает только
формулировку ответа, а не число голосов и т.д.
Также обратите внимание на класс Meta, включенный в каждый класс модели. Из названия понятно, что этот класс содержит мета-данные о классе (описательного характера). В нашем случае это русское название модели в административном интерфейсе - для единственного и множественного числа.
Код моделей написан, можно
генерировать на его основе таблицы. Однако сначала произведем настройку
нашего проекта firstsite.
Продолжение - Опрос (ч.2)
Комментариев нет:
Отправить комментарий