Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2017 08:55:44

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Django передача данных между представлениями...

Бюсь и гуглю, гуглю и бъюсь… ((
… над такой задачкой…
Есть:
- представление1, вызывается по корню из регулярки url… и возвращает страницу шаблона с формой
- форма в шаблоне (см. выше), которая POSTом отправляет значение, например name='Вася' на url по регулярке /calcname/
- представление2, вызывается по /calcname/ из регулярки url… и производит какие-то действия с переданной ему POSTом переменной name…

Так вот…
Не могу решить задачу чтобы представление2 после своей работы перенаправило на корень, НО с передачей параметра name POSTом… (((
Ну или если более обобщенно:
Нужно чтобы после работы представления2, юзера кинуть на корень, чтобы я в представлении1 уже в шаблоне вывел переменную name….

т.е. redirect - запросто кинет на корень, но параметр там можно передать только GETом, по моему…
render… и HttpRespons-ы… берут данные словарями, возвращают страницы не меняя урла… - т.е. та ки останется /calcname/
то же самое если напрямую вернуть представление1… - страница вернется правильная как и надо, НО урл так и останется /calcname/… ((

Чего я не догоняю нубским мозгом? (((

Спасибо!

ПС Если написал много непонятных слов - скажите - я кодом накидают пример….

Офлайн

#2 Дек. 5, 2017 12:15:10

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Django передача данных между представлениями...

Если вы хотите сделать редирект и передать при этом post данные, то: 1) можно сделать кастомный httpresponseredirect, со status_code=307, и возможно, браузер, когда увидит, что получил код 307 сделает редирект и передаст при этом те же post данные по новому адресу. Более надежный подход, пожалуй, использовать сессии. Сохранить необходимые данные в сессии и потом сделать обычный httpreponseredirect и в обработчике вытащить данные из сессии.
С помощью простого httpreponsereirect (не помню, statuscode=302 для него…) нельзя никак передать, точнее заставить браузер, выслать повторно post данные; В спецификации http 1.1 редирект такой “возможен” при status_code=307.

Офлайн

#3 Дек. 5, 2017 13:56:23

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Django передача данных между представлениями...

scidam
Более надежный подход, пожалуй, использовать сессии

Излазив инет - я нашел этот выход…. и именно так и сделал вчера по итогу, после нескольких бессоных часов…

Но мне показалось что это как-то… кривовато чтоле…. вроде простая задача…. а в итоге - вырезали гланды, через….

На самомом деле я практикуюсь и хотел сделать авторизацию юзера с формы. Причем мне не нравится мануальный подход, когда на каждый юзерский тычок мы подсовываем ему новый шаблон с элементами…
Поэтому решил не использовать готовые решения джанги, а спустится на уровень пониже…. login, logout и пр….
И решил вести весь диалог в окошке на одной (первой) странице…



Когда пытался сделать все одним представлением - уткнулся в проблему когда защита формы ругалась, если после авторизации я обновлял страницу и повторно отправлял данные…
С целью избежать этого… ну и + чтобы логику не мешать в кашу - развел вход и выход по отдельным представлениям на отдельных URL….

При ВЫходе - проблем нет, там ничего особенного выводить не нужно - разлогинил и редиректом на первую страницу. Все.

А вот когда юзер ткнул на первой странице на кнопку войти - данные улетели по спец. урлу в спец представление.. .так вот… если авторизация НЕ прошла - я хочу вернуть его назад на первую страницу НО чтобы в поле логин остался введенный им “неправильный” логин…. т.е. мне надо заполнить этим значением поле формы…. А т.к. при НЕудачной авторизации request.user содержит анонимуса, то взять мне этот неправильный логин неоткуда, кроме как из переменной которую прочитал в представлении…
Вот и получается - что не просто редирект, а чтобы еще и с переменной….

Ну да ладно…. если все так делают, и это приемлемо и нормально - тогда я спокоен…. )))

Спасибо!

Офлайн

#4 Дек. 5, 2017 14:05:53

Sdelayte_podskazku_imen
Зарегистрирован: 2017-12-01
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Django передача данных между представлениями...

Sdelayte_podskazku_imen
уткнулся в проблему когда защита формы ругалась, если после авторизации я обновлял страницу и повторно отправлял данные…

Кстате, а это как-то можно было решить?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version