Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 16, 2012 07:43:23

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

Спасибо большое за советы. На выходных займусь плотным перепроектированием :) Попробую сделать иерархию и/или переписать часть на cbv и посмотреть что получится.
—–
оффтопик
JOHN_16, esp рулез!)



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#2 Ноя. 16, 2012 07:56:13

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

def foo(request, param):
    instance=get_object_or_404(MyModel, pk=param)
    if request.method='POST':
        form=MyForm(request.POST)
            if form.is_valid:
                form.save()
                return HttpResponseRedirect(reverse( 'name' ))
            else:
                return render_to_response('template.html', {'object':instance, 'form':form})
    else:
        form=MyForm()
        return render_to_response('template.html', {'object':instance, 'form':form})

пишется вот так:

def foo(request, param):
    instance = get_object_or_404(MyModel, pk=param)
    form = MyForm(request.POST or None)
    
    if request.method == 'POST' and form.is_valid(): 
        form.save()
        return redirect('name')
    
    return render('template.html', {'object':instance, 'form':form})

что кстати даже короче получилось (7 строк vs 8 строк), чем с использованием специально заточенного generic view. Код можно еще чуть сократить (выкинуть проверку request.method == ‘POST’, если CSRF-защита везде используется). Ну и в джанге классические представления-функции не депрекнут, этого уж точно можно не бояться.



Офлайн

#3 Ноя. 16, 2012 08:20:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

kmike, Вы сейчас собираетесь применить прием из набора шаблонов годного троллига?
Не стоит. Код, который я привел взят прямиком из Django-book. Вот отсюда
Вот он.

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                cd.get('email', 'noreply@example.com'),
                ['siteowner@example.com'],
            )
            return HttpResponseRedirect('/contact/thanks/')
    else:
        form = ContactForm()
    return render_to_response('contact_form.html', {'form': form})

Как оно “вот так пишется правильно” объясните авторам фреймворка.
Что есть сказать по существу обсуждаемого сабжа не пытаясь кинуть каку в оппонента?
А то ведь в эту игру можно играть вдвоем, например, “Да ты просто не осилил CBV!



Отредактировано FishHook (Ноя. 16, 2012 08:23:10)

Офлайн

#4 Ноя. 16, 2012 08:57:22

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

Я не понял ваших претензий ко мне (и удивлен тону беседы, кстати). В djangobook - хороший учебный материал, чтоб в голове все по полочкам разложилось, + книжка довольно старая, особенно по меркам IT. Вьюху contact в реальном проекте лучше написать так:

    
def contact(request):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        form.send_mail()
        return redirect("thanks")
    return render('contact_form.html', {'form': form})

Конструктивной беседы не выходит, так что ладно, не буду больше докучать.



Офлайн

#5 Ноя. 16, 2012 15:34:45

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

kmike
пишется вот так:

def foo(request, param):
instance = get_object_or_404(MyModel, pk=param)
form = MyForm(request.POST or None)

if request.method == ‘POST’ and form.is_valid():
form.save()
return redirect('name')

return render('template.html', {'object':instance, ‘form’:form})

Пишется вот так:

class MyView(UpdateView):
    template_name = 'template.html'
    form_class = MyForm



Отредактировано zheromo (Ноя. 16, 2012 15:35:29)

Офлайн

#6 Ноя. 16, 2012 15:39:48

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

kmike
def contact(request): 
    form = ContactForm(request.POST or None) 
    if form.is_valid():
        form.send_mail() 
        return redirect("thanks") 
    return render('contact_form.html', {'form': form})

class MyContactView(EmailView):
    form_class = ContactForm
     template_name = 'contact_form.html' 



Отредактировано zheromo (Ноя. 16, 2012 15:41:03)

Офлайн

#7 Ноя. 16, 2012 16:30:29

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

kmike, в целом, мне понятны ваши аргументы. С некоторыми я согласен.
Но есть нюансы. Вот смотрите:

kmike
Мне не нравятся generic views на CBV, т.к. для того, чтоб понять, что происходит во вьюхе, нужно прочитать код нескольких миксинов и в голове построить, что в каком порядке выполняется (особенно если есть вызовы super()), с учетом MRO. С вьюхой на функциях “поток выполнения” читается сразу, а с классом он то “заныривает” куда-то во внутренности джанги, то “выныривает” оттуда.
Вам не кажется, что вы описываете последствия проблемы выше уровнем, выбрав CBV козлом отпущения?
Ведь описываемая вами ситуация случилась (и случается) из-за отсутствия документации - раз, плохо настроенного процесса тестирования и коммита - два.


Давайте разберемся.
Одно дело, кода нужно разобраться с логикой модуля системы, другое - с логикой работы конкретного алгоритма внутри функции/метода.
Для первого нужна документация типа UML, для второго читаемый код и комментарии.


Когда разработчику нужно понять логику работы уже существующего модуля?
Несколько примеров:
1. Он работает с этим модулем впервые.
2. Он вернулся к нему после длительного перерыва.
3. Идет изменение архитектуры.
4. Обнаружена ошибка в бизнес-логике или архитектуре.

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


Когда разработчику нужно понять логику работы существующего кода?
Примеры:
1. Нужна доработка локальной логики.
2. Найдена ошибка в коде. То, что ошибка именно в коде, а не модуле, известно из отчета тестера или результатов теста.
3. Знакомство с кодом в уже знакомой в целом системе.
4. Реализация новых функций, расширение возможностей конкретной функции/класса.

Чтение кода, комментариев и сверка с документацией модуля будет более эффективным и быстрым.
Имеют значение размер и читаемость кода, внятные inline-комментарии по существу, понятные комментарии ссылающиеся на глобальную документацию для сверки алгоритма.


Мы пришли к понимаю, что разные задачи выдвигают разные требования к коду.
Учитывая это, напрашивается вывод о бесполезности нецелевого использования кода как инструмента для изучения проекта и трате напрасных усилий в том месте, где от этого нет пользы проекту.
При этом польза разработчику вполне может иметь место, например, для самообразования или желания вникнуть.


На момент, касающийся тестирования и коммита кода у меня уже не осталось времени.
Коротко: тестирование и настройка CI для больших проектов делает ненужным большую часть описываемых вами задач, т.к. они решаются на другом уровне автоматизированным способом.

А для малых проектов CBV часто даже вредны, например, из-за естественной для них “многословности”.
Т.е. это чистой воды over engineering, соответственно - плохой выбор.

kmike
Вот это разве не ад (пример из документации)?
Ад есть везде. Вот мнение, с которым я во многом согласен. Тут есть и пример заныривания для view-функций, и пример “ада” даже не из документации,- из исходников Джанги ;)

Тезисно, мое мнение в дополнение к статье по ссылке:
1. Использовать нужно и то, и другое.
2. Важно знать преимущества и недостатки (реально это возможно только при наличии опыта).
3. Выбирать подход нужно, исходя из нескольких критериев, например: сложность бизнес-логики, объем проекта и кода, план поддержки после сдачи проекта.



Отредактировано Lexander (Ноя. 16, 2012 16:31:33)

Офлайн

#8 Ноя. 16, 2012 20:25:17

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

Помоему jquery было не совсем удачным выбором для ajax реализации. Можно же dajax заюзать было, оно вроде поудобней.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#9 Ноя. 16, 2012 23:15:46

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

Вы в курсе, что django-dajax использует jQuery?
Кроме jQuery на клиенте могут использоваться и другие фреймворки.

Чуть удобнее на сервере, но лишний код на клиенте.

Вообще, на серверной стороне ваш AJAX запрос ничем не отличается от обычного HTTP-запроса.

В чем проблема то?

ЗЫ
django-dajax чем-то на Corba смахивает :)



Офлайн

#10 Ноя. 17, 2012 10:19:19

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Подойдет ли django для проекта

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



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version