Как удалить параметры из URL в Flask python
на моем сайте у меня есть URL, которые будут иметь параметры трейлинга, такие как:
example.com/magicpage/?p=10&d=somestuff
есть ли способ удалить эти параметры после обработки запроса? Поэтому, когда пользователь нажимает на ссылку, параметры передаются, но видимый URL-адрес просто example.com/magicpage
Подробнее:
@app.route("/magicpage")
def magicPage():
parse parameters and do things
finish up
remove the trailing parameters in the url
return the rendered page
2 ответов
есть два способа сделать это.
Вариант 1: используйте параметры POST, а не GET.
если параметры передаются HTML-формой, добавьте method=post
до <form>
tag, и изменить страницу с:
@app.route("/magicpage")
def magicPage():
param1 = request.args.get("param1")
param2 = request.args.get("param2")
в:
@app.route("/magicpage", methods=["POST"])
def magicPage():
param1 = request.form.get("param1")
param2 = request.form.get("param2")
Upside нет перенаправления. Недостатком является то, что если пользователь попытается обновить полученную страницу, они получат неприятное всплывающее окно браузера о повторной отправке информация:
это более распространенный способ иметь скрытые параметры, передаваемые в сети.
Вариант 2: Выполните перенаправление после обработки параметров.
это немного сложно, потому что, поскольку мы перенаправляем на ту же страницу, нам нужно проверить, приходят ли они на эту страницу в первый раз или во второй.
лучший способ сделать это-использовать запрос post. Это имеет преимущество не имея всплывающего окна обновления, но недостаток не дает вам параметры в более позднем рендеринге страницы, если вы не сохраняете их в сеансе.
@app.route("/magicpage", methods=["GET", "POST"])
def magicPage():
if request.method == 'POST':
# process parameters
redirect(request.path)
if request.method == "GET":
# render page
кроме того, вы можете просто проверить наличие одного из параметров в качестве индикатора:
@app.route("/magicpage", methods=["GET", "POST"])
def magicPage():
if request.form.get("param1", None) is not None:
# process parameters
redirect(request.path)
else:
# render page
вы можете использовать скрытые поля форм для передачи параметров на нескольких страницах с помощью POST
.
<input type="hidden" ...>