Бутылка Python — разница между шаблоном перенаправления и возврата

У меня два вопроса по бутылке:

1) В чем разница между:

redirect('/login') и return template('login')

Разве оба не заставят пользователя перейти на одну и ту же страницу /login?

2) Могу ли я передавать аргументы в redirect, как в случае с return?

Например:

Работает ли это: redirect('/login', userName="foo") как мы делаем в этом случае:

return template('login', userName="foo")


person saveshodhan    schedule 28.07.2015    source источник
comment
Не знаком с Bottle, но в Flask return template (точнее, render_template) отобразит шаблон, а redirect отправит пользователя в другую функцию просмотра, а затем вы получите все, что возвращает эта функция, другой шаблон, немного JSON или помощь бога. вы XML.   -  person kylieCatt    schedule 28.07.2015


Ответы (1)


1) В чем разница между:

redirect('/login') и return template('login')

Из документации по бутылке для перенаправления:

Чтобы перенаправить клиента на другой URL-адрес, вы можете отправить ответ 303 See Other с заголовком Location, установленным на новый URL-адрес. redirect() сделает это за вас

Метод redirect() отправит ответ 303 пользователю, который затем отправит другой запрос на ваш сервер для страницы «/login». Если вы используете метод template(), вы будете возвращать веб-страницу непосредственно пользователю.

2) Могу ли я передавать аргументы в redirect, как в случае с return?

redirect() не принимает переменные запроса, такие как те, которые вы передаете template(). Если вы хотите использовать эти переменные, вам нужно будет явно указать их в URL-адресе. Например. чтобы использовать URL '/login' с userName="foo", вам нужно позвонить redirect('/login?userName="foo")

Изменить, если вы не хотите сохранять все переменные в URL-адресе, попробуйте получить эти значения при отображении страницы. например Вызовите redirect('/login') без переменных и сделайте так, чтобы метод, отображающий '/login', вызывал template() с правильными переменными.

person Fernando Matsumoto    schedule 28.07.2015
comment
1) Несколько вещей, которые я заметил - если я return, он просто возвращает шаблон пользователю. Но если я redirect, элемент управления переходит на этот маршрут, его функция выполняется, а затем шаблон возвращается пользователю. Кроме того, в redirect URL-адрес меняется на имя перенаправленного маршрута, тогда как в случае return template URL-адрес не меняется. 2) Обычно я включаю в файл tpl что-то вроде этого: <b>Hellp {{userName}}</b>. В результате получается - Hello foo. Если я передам переменные из URL-адреса, как вы упомянули, могу ли я использовать их внутри tpl? - person saveshodhan; 29.07.2015
comment
@ ss2025 2) Я так думаю, но вы всегда можете попробовать использовать перенаправление на свою страницу, чтобы увидеть, работает ли оно. - person Fernando Matsumoto; 29.07.2015
comment
Да спасибо! Эта вещь работает ... но есть ли способ, кроме как указать ее в URL-адресе? Потому что таких переменных много, и я не хочу, чтобы URL-адрес выглядел сложным. - person saveshodhan; 29.07.2015
comment
Вместо этого вы можете использовать POST-запрос. См. stackoverflow.com/questions/21087796/ - person tripleee; 10.05.2016