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

Firefox refresh confirmation of a POST webpage

это более распространенный способ иметь скрытые параметры, передаваемые в сети.


Вариант 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" ...>