Как удалить параметры из 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>
и измените страницу с:@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")
Плюс в том, что нет перенаправления. Недостатком является то, что если пользователь попытается обновить полученную страницу, он получит неприятное всплывающее окно браузера о повторной отправке информации:
Тем не менее, это более распространенный способ иметь скрытые параметры, передаваемые в сети.
Вариант 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