Форум сайта python.su
2
Спасибо большое за советы. На выходных займусь плотным перепроектированием :) Попробую сделать иерархию и/или переписать часть на cbv и посмотреть что получится.
—–
оффтопик
JOHN_16, esp рулез!)
Офлайн
4
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})
Офлайн
568
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})
”
Отредактировано FishHook (Ноя. 16, 2012 08:23:10)
Офлайн
4
Я не понял ваших претензий ко мне (и удивлен тону беседы, кстати). В 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})
Офлайн
2
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)
Офлайн
2
kmikedef 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)
Офлайн
33
kmike, в целом, мне понятны ваши аргументы. С некоторыми я согласен.
Но есть нюансы. Вот смотрите:
kmikeВам не кажется, что вы описываете последствия проблемы выше уровнем, выбрав CBV козлом отпущения?
Мне не нравятся generic views на CBV, т.к. для того, чтоб понять, что происходит во вьюхе, нужно прочитать код нескольких миксинов и в голове построить, что в каком порядке выполняется (особенно если есть вызовы super()), с учетом MRO. С вьюхой на функциях “поток выполнения” читается сразу, а с классом он то “заныривает” куда-то во внутренности джанги, то “выныривает” оттуда.
kmikeАд есть везде. Вот мнение, с которым я во многом согласен. Тут есть и пример заныривания для view-функций, и пример “ада” даже не из документации,- из исходников Джанги ;)
Вот это разве не ад (пример из документации)?
Отредактировано Lexander (Ноя. 16, 2012 16:31:33)
Офлайн
2
Помоему jquery было не совсем удачным выбором для ajax реализации. Можно же dajax заюзать было, оно вроде поудобней.
Офлайн
33
Вы в курсе, что django-dajax использует jQuery?
Кроме jQuery на клиенте могут использоваться и другие фреймворки.
Чуть удобнее на сервере, но лишний код на клиенте.
Вообще, на серверной стороне ваш AJAX запрос ничем не отличается от обычного HTTP-запроса.
В чем проблема то?
ЗЫ
django-dajax чем-то на Corba смахивает :)
Офлайн
2
Проблема в том, что с серьезными проектами дела не имел, все сайты-визитки. Ну и опыта написания аякс приложений нет вообще.
Офлайн