Я новичок в этом деле Django, и я решил начать с ClassBased GenericView, а не с более старой функцией Generics, которая вызвала пару камней преткновения, которые не имеют документации. Во всяком случае, до сих пор мне очень нравились GenericView и расширили их декораторами.Стиль кодирования Django: Должен ли я использовать декораторы классов здесь?
Простой пример того, что я делал
ideapad/urls.py
from ideapad.views import *
urlpatterns = patterns('ideapad.views',
url(r'^$', IndexListView.as_view(), name='url_index'),
)
ideapad/views.py
from django.views.generic import ListView
from ideapad.models import Idea
from sauce.decorators import sort_queryset
@sort_queryset('-date')
class IndexListView(ListView):
model = Idea
template_name = 'ideapad/index.html'
context_object_name = 'ideas'
sauce/decorators.py
def sort_queryset(default_sort):
"""
Decorator that sorts queryset according to GET data
Made to wrap GenericViews with get_queryset methods
"""
def decorator(cls):
fn=cls.get_queryset
def wrapper(self):
queryset = fn(self)
sortmethod = self.request.GET.get('sort', default_sort)
if hasattr(queryset, 'order_by'):
queryset = queryset.order_by(sortmethod)
return queryset
cls.get_queryset=wrapper
return cls
return decorator
Вопрос в том, что для удобства чтения и ремонтопригодности существует ли «лучший» или «более приемлемый» способ сделать это? Или это просто предпочтение стиля кодирования?
Причина, о которой я прошу, в то время как я думаю, что это более читаемо таким образом, я хотел бы сделать деньги, делая это когда-нибудь, и не хочу развивать странные привычки кодирования, которые будут мочиться с коллегами так красиво очень ценится любой ввод в стиле кодирования. Благодарю.
Ну, он просто делает полностью слишком много смысл использовать MixIns, поскольку именно так были созданы GenericViews * facepalm *. Одно небольшое исправление (удалить декоратор), и это прекрасно. Спасибо за минуту и спасибо за отличный ответ. –