
Centrino
03.06.2017
10:19:13
со скольки методов стоит смотреть в сторону rest?
для трех?

Eugene
03.06.2017
10:19:59
Можно и для удобства заюзать:D

Dan
03.06.2017
10:21:01
думаю когда у тебя от 2-х и более приложений!! в каждом приложении N моделей
и API может создавать, удалять, отдавать объект или список объектов

Google

Centrino
03.06.2017
10:21:50
есть какой-нибудь хороший пример как апи писать?
Хочу попробовать самому сделать

Dan
03.06.2017
10:22:22
у меня под рукой нет =)

Eugene
03.06.2017
10:26:15
У swagger спецификация топовая была

Centrino
03.06.2017
10:28:45
swagger это кто?

Eugene
03.06.2017
10:29:50
swagger это что:D
http://swagger.io/specification/

Eugene
03.06.2017
10:30:17

Centrino
03.06.2017
10:30:33
спасибо, посмотрю

Рустам
03.06.2017
10:32:01
Ну у меня порядка 10-15 функций будет
Точнее они уже есть
Но они рендерят шаблон
Теперь мне надо чтобы они json-ом отдавали

Centrino
03.06.2017
10:33:29
можно context переделать под json быстро

Google

Рустам
03.06.2017
10:34:00
Ну да
Я так и планировал
Просто слышал что-то про рест
И что его делают для бэкэнда приложений
Вот и подумал

Artem
03.06.2017
10:51:13
Ты можешь в принципе расширить свой проект, дополнительной аппкой для API и уже там релизовать сериализаторы с уже заготовленными кверисетами, будет красиво и аккуратно!

Alexander
03.06.2017
11:30:25
а вот, допустим, у нас классическое приложение, без API и прочего такого, с обычными CBV, MVC
как вы выбираете, от какого класса наследоваться в ситуациях, когда подходит сразу несколько вариантов, к примеру, некая страница пользователя (профиль) и там же форма редактирования этого профиля
DetailView + UpdateView

Сергей
03.06.2017
11:31:37
я бы выбрал функцию

Alexander
03.06.2017
11:32:41
и там же, допустим, какой-нибудь список объектов, созданных этим пользователем,
то есть даже ListView + DetailView + UpdateView если использовать CBV
какое каноническое решение предлагается? сделать свой CBV с миксинами от ListView + DetailView + UpdateView
допустим, если цель - написать как можно меньше своего кода

Eugene
03.06.2017
11:34:53
Я бы наверное выбрал DetailVIew + UpdateView в первом.
+ миксины.

Alexander
03.06.2017
11:37:28
есть вариант сделать 2 страницы, 2 view, одну для обработки формы (туда она отправляется), вторую просто для отображения
то есть отдельно ListView и/или DetailView и отдельно UpdateView
при попытке GET UpdateView там будет Method Not Allowed (GET) или 302 редирект на ListView и/или DetailView
как вы считаете, это лучше, чем комбинировать всё в 1 view?

Rookie
03.06.2017
11:51:33

Google

Alexander
03.06.2017
11:54:02
окей, усложним задачу, допустим, это какой-нибудь фэйсбук) и там много форм на странице профиля (редактирование профиля, написание нового сообщения, написание вопроса в техподдержку, написание отзыва/комментария к какому-либо видео), там разные списки (видео юзера, фотки юзера), там сами данные юзера (имя, фамилия), допустим, без Vue.js и API (ну, у нас такой вот пример, всё на стороне сервера и генерируется и обрабатывается Django )
вот в таком случае имеет смысл выделять несколько UpdateView отдельно?
мне хочется понять Django way в данном случае, какой канонический путь решения этой задачи предлагают разработчики - набирать 1 охрененно большую View из разных Mixin'ов или сделать несколько Views

Никита
03.06.2017
11:58:24
Тут надо на ajax и API переходить.

Pavel
03.06.2017
12:06:08
Если есть много форм, и хочется их в одном submit обрабатывать, то я бы сделал несколько разных форм, пачка FormView для каждой формы и одна View, которая вызывает post последовательно в каждой FormView.


Alexander
03.06.2017
12:06:31
а если без API - вот, допустим, у нас есть некий DetailView, там просто показывается профиль и куча всего ещё, на нём отображается некая форма, которая самбитится на некий другой url, где её обрабатывает UpdateView... в случае успеха там редирект снова на эту DetailView, а в случае ошибок там метод form_invalid, то есть генерится некая форма с ошибками, мне вот интересно, а можно ли как-нибудь получить это внутри DetailView? есть у Django вот эти интеграции , что-то я не помню..
сохранить её в request?
если переопределить form_invalid (помещает форму с ошибками в request и делает редирект на DetailView) у UpdateView, внутри DetailView я смогу получить доступ к этой форме с ошибками (в get_context_data записать её ) или?..
то есть я хочу иметь DetailView, который будет получать и рендерить все результаты, а UpdateView вместо рендеринга страницы будет передавать свой контекст туда в DetailView


Rookie
03.06.2017
12:17:47
окей, усложним задачу, допустим, это какой-нибудь фэйсбук) и там много форм на странице профиля (редактирование профиля, написание нового сообщения, написание вопроса в техподдержку, написание отзыва/комментария к какому-либо видео), там разные списки (видео юзера, фотки юзера), там сами данные юзера (имя, фамилия), допустим, без Vue.js и API (ну, у нас такой вот пример, всё на стороне сервера и генерируется и обрабатывается Django )
Вариант иметь 1 generic View любой. И на ней сколько угодно аякс вызовов. Каждый вызов обрабатывается своей функцией, которые лежат в каталоге utils, допустим, этого приложения.

Alexander
03.06.2017
12:18:26
а если без ajax?

Rookie
03.06.2017
12:18:45
А почему без аякс?

Alexander
03.06.2017
12:19:42
ну вот, допустим, я хочу просто POST'ом как обычно отправлять форму на UpdateView, а результаты смотреть на DetailView
я могу передавать это на стороне питона как-то?
это больше такой академический пример

Rookie
03.06.2017
12:21:13
Без проблем.
Определяй формам префиксы, чекай в POST наличие твоей формы.
Но, имхо, это огород.

Google

Alexander
03.06.2017
12:22:11
как правильно передать всё из 1 view в другую?
вот есть UpdateView, там на этапе форм инвалид сформировалась форма с ошибками и вместо рендеринга её средствами UpdateView я хочу передать её внутрь контекста DetailView и передать управление уже DetailView дальше
такой подход как мне кажется обеспечит наименьшее количество новых строчек кода и наибольшую реюзабельность встроенных компонентов
но да, это может выглядеть немного извращением)
это может быть полезно в случае, допустим, если заранее известно, что в браузере js намеренно был выключен
какие-нибудь проекты для скрытосетей
то есть нельзя сделать ajax запрос

Rookie
03.06.2017
12:28:35
Не пробовал так, если честно. Не уверен, что будет работать kwargs update.
Но, если бы меня сильно припекло сделать ИМЕННО ТАК, я бы писал в сессию, делал ридерект куда надо, и брал из сессии.
Ну, reverse ещё есть, да.

Admin
ERROR: S client not available

Ahmed
03.06.2017
13:20:30
Ребята, как называется фильтр в шаблонизаторе который фильтрует по номера. К примеру есть 2 объекта, и каждый объект надо вывести на странице, в одном месте чтобы постоянно выводился только объект под номер 0, а в другом месте объект под номером 1.

vadim
03.06.2017
13:28:42
как правильно передать всё из 1 view в другую?
это костыльный костыль и такой подход обеспечит лишь насыл поноса со стороны других разрабов.
все формы из миксинов базовых состоят - посмотреть что миксуется там и там выбрать общее и оверрайдить метод get со своей логикой
и DetailView - как бы говорит название что формы здесь не должно быть

Alexander
03.06.2017
13:32:07
то есть просто будут какие-то свои вьюшки, никак не связанные с базовыми из Django
что породит много новых строчек кода, а их хотелось избежать
хотелось что-нибудь типа манкипатчинга, раз-раз и готово, используются базовые вьюшки

Rookie
03.06.2017
13:34:41

Alexander
03.06.2017
13:35:48
ну, в общем, хотелось что - переопределить form_invalid и вызвать там DetailView, передав дополнительный контекст с формой

vadim
03.06.2017
13:36:11
вариант выше - породит слабую читабельность кода
вопрос не в строках, а в приемственности - если конечно не хобби проект
что касается перепределять - миксины как бы официально входят в доки,
а DetailView - это вариант реализации не более

Rookie
03.06.2017
13:36:39

Google

Alexander
03.06.2017
13:36:42
конечная цель - решить задачу с минимальным написанием нового кода)
пофиг, насколько сложным будет код, главное чтобы его [своего кода] было мало) суть в этом)
конкретно для данного проекта
так reverse же просто ссылку генерирует?
короче, выше правильно предложили через сессии хранить какие-то промежуточные данные и делать редирект, наверное, так лучше всего для данной цели

Rookie
03.06.2017
13:40:16
А у тебя задача в этом и заключается.
Принять ошибки, если form_invalid, записать их в словарь какой то, и отправить на другую вьюху, которая этот словарь примет.

Alexander
03.06.2017
13:40:47
ну тут редирект через браузер неизбежен, похоже
потому что иначе та же самая страница с DetailView будет доступна с разных урлов (если отправлять формы на разные урлы), что вроде как не очень хорошо
а если все формы отправлять на 1 урл - тогда не избежать большого сложного View, что тоже плохо
так что без редиректов, похоже, никак
я изначально хотел без редиректов, когда 1 вью передаёт данные в другую вью напрямую

vadim
03.06.2017
13:44:31
типа того
def form_invalid(form)
request.method = 'GET'
return DetailView.as_view(form=form)(self.request, *self.args, **self.kwargs)
в своем классе DetailView
def __init__(self, form, **kwargs)
super....
self.form = form

Alexander
03.06.2017
13:45:14
ну да, но тут получится, что та условная страница профиля будет отображаться по другому адресу уже
после сабмита формы

Rookie
03.06.2017
13:45:29

vadim
03.06.2017
13:45:36
ну или get - делать в DetailView чтобы и post обрабатывал

Alexander
03.06.2017
13:46:12

vadim
03.06.2017
13:46:20
типа задекларировать
def post(...)
return self.get(...)
тоды хакать реквест не надо
наверное

Rookie
03.06.2017
13:46:54

vadim
03.06.2017
13:47:00
короче вариантов как пыхтон в похапе превратить море )

Alexander
03.06.2017
13:47:55