Вопросы по Django

Что лучше использовать для MVC ?(Советы).


models.py

       class Post(models.Model):
             pass 

views.py

       from django.views.generic import ListView
       from .models import Post
       class Post_list(ListView):
             template_name = 'post_list.html' 

вот это 1ый пример. Я использовал класс что бы комбинировать базу с шаблонами. А некоторые использует так :

views.py с контекстом

    context = Post.objects.all() 
    return render('', context) 

Не могу понять разницу? Помоему мнению лучше использовать с классами чем с методом. Спасибо за ответ!


Ответы (1 шт):

Автор решения: Roman Konoval

Базовые классы в django.views.generic покрывают типичные случаи. Они позволяют реализовывать стандартные сценарии (типа показать список), вообще без кода (или с минимальным его количеством).

В них зашита определенная логика обработки запроса и некое стандартное поведение. Это поведение можно конфигурировать и переопределять некоторые его шаги. В общем такие классы реализуют паттерн шаблонный метод.

Для ListView методы вызываются в таком порядке:

setup()
dispatch()
http_method_not_allowed()
get_template_names()
get_queryset()
get_context_object_name()
get_context_data()
get()
render_to_response()

Для каждого есть реализация по-умолчанию, но их можно переопределить, если нужно.

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

→ Ссылка