Вопросы по 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 шт):
Базовые классы в 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-функции.