Разработка Django - как правильно выложить и использовать код - PullRequest
0 голосов
/ 01 апреля 2011

Привет, я PHP-разработчик, пытающийся перейти на Django, и мне немного трудно понять, где что-то делать и как использовать новый язык.В основном то, что я хочу знать, например, в codeigniter я бы сделал классы и функции в моих контроллерах.Где я могу это сделать в django?

Я считаю, что «представление» в django больше похоже на контроллер в инфраструктуре MVC, но все примеры, которые я могу найти, очень просты и просто вызывают шаблонпередать ему некоторые данные.

В настоящее время у меня есть представление индекса и представление «ставки» в моем текущем проекте.Страница индекса будет вызывать тарифы через JS и передавать ей некоторые переменные GET.В моей версии php я использовал их для создания экземпляра класса ставок, в котором были все необходимые функции.Я хочу сделать это в Джанго.

Ответы [ 3 ]

1 голос
/ 01 апреля 2011

Причина, по которой он называется «MVT» вместо «MVC», заключается в том, что «View» для Django означает «представление данных (согласно заданной логике)» и «Template» означает «отображение представленных данных»."В традиционной парадигме MVC «Контроллер» означает «исполнитель логики», а «Вид» - «представление результата выполненной логики».(Это почти та же идея, но не совсем).

Итак, что это значит?По сути, если бы я что-то строил в Symfony, я бы поместил всю логику в компоненты sfAction.В CodeIgniter это было бы в CI_Controller.В Django я размещу всю логику в «Views».

Так же, как CI (и Zend, и другие) будут вызывать «View» от потомка контроллера, представление Django также будет вызывать «Template» из своего «View».(Представления Symfony часто вызываются в другом синтаксисе, поэтому я оставлю это читателю для исследования при желании).


Если посмотреть на ваш пример, похоже, что вы хотите вызвать метод в«Представление» (которое настроено на urls.py), которое просто создает экземпляр другого объекта, в котором «вся ваша логика».Что-то вроде:

def ratesHandler(request):
    rate = MyRatesClass(request.GET)
    return HttpResponse("Insert something here. ") #or render_to_response
0 голосов
/ 01 апреля 2011

В django: «модели» входят в models.py, «контроллеры» - в views.py, а «представления» - в шаблоны.

Модели, как правило, являются классами, которые подкласс django.db.models.Model

Контроллеры (в views.py) часто являются функциями, но вы можете использовать классы, если хотите.

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

Я не могу сказать, есть ли вопрос в последних 2 параграфах вашего поста.Если там есть вопрос, отредактируйте свое сообщение, чтобы оно было понятно.

0 голосов
/ 01 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...