Python Flask возвращает перенаправление с параметрами без отображения параметров в URL

У меня есть простое приложение python flask. Когда один из моих пользователей комментирует мою домашнюю страницу, я хочу перенаправить их обратно на домашнюю страницу. В настоящее время у меня есть тот же маршрут, который обрабатывает домашнюю страницу и комментарии. Это выглядит так:

@app.route('/home', methods=['POST', 'GET'])
@login_required
def home():
    form = CommentForm()
    user = User.query.filter_by(username=current_user.username).first()
    house = House.query.filter_by(owner_id = current_user.id).first()
    neighbors = Neighbors.query.filter_by(houseid=house.id).all()
    if user.id == current_user.id:
        if form.validate_on_submit():
            time = strftime("%a, %b %d %Y %X", localtime())
            comment = Commentsection(houseid = house.id, commentbody = form.body.data, times = str(time), commenter=user.username, commenterid=user.id, commenterpic = user.image_file )
            db.session.add(comment)
            db.session.commit()
            link = url_for('add', invite_token=house.linkinv, _external=True)
            comments = Commentsection.query.filter_by(houseid=house.id).order_by(Commentsection.id.desc()).all()
            return redirect(url_for('home', title='Home', house=house, form=form, comments=comments, link=link, neighbors=neighbors))
        else:
            link = url_for('add', invite_token=house.linkinv, _external=True)
            comments = Commentsection.query.filter_by(houseid=house.id).order_by(Commentsection.id.desc()).all()
            return render_template('home.html', tite='Home', house=house, form=form, comments=comments, link=link, neighbors=neighbors)

Когда пользователь отправляет комментарий, код запускается и форма проверяется. Когда форма проверена, она создает модель комментария и фиксирует ее в базе данных. После этого он перенаправляет пользователя на ту же страницу, чтобы избежать надоедливого всплывающего окна «Хотите снова отправить эту форму» в Chrome. Если бы я не перенаправлял, форма продолжала бы отправляться каждый раз, когда я перезагружаю страницу. Проблема в том, что когда я перенаправляю, url_for думает, что я передаю аргументы URL вместо переменных, и помещает их прямо в URL, что приводит к чему-то вроде этого:

http://127.0.0.1:5000/home?`title=Home&house=House%28%27Nicks+Home%27%2C%2732+Ellridge+Place%27%2C%271%27%2C%29&form=%3Cdog_house.forms.CommentForm+object+at+0x04A75C10%3E&comments=Commentsection%28%2710%27%2C%271%27%2C%27Hello+world%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%279%27%2C%271%27%2C%27Hello+world%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%277%27%2C%271%27%2C%27Hello+world%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%276%27%2C%271%27%2C%27Nickkk%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%275%27%2C%271%27%2C%27Hello+man%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%274%27%2C%271%27%2C%27Nick%3F%27%2C%27nickdeb%27%2C%27default.jpg%27%2C%29&comments=Commentsection%28%273%27%2C%271%27%2C%27Hey+nick%27%2C%27nick%27%2C%27414f2185a17700081ecfff3c948527405e44c507f029d068.JPG%27%2C%29&comments=Commentsection%28%272%27%2C%271%27%2C%27Hello+world%27%2C%27nick%27%2C%27414f2185a17700081ecfff3c948527405e44c507f029d068.JPG%27%2C%29&comments=Commentsection%28%271%27%2C%271%27%2C%27Hello+world%27%2C%27nick%27%2C%27414f2185a17700081ecfff3c948527405e44c507f029d068.JPG%27%2C%29&link=%2Fhome&neighbors=%3CNeighbors+1%3E`

Вместо:

http://127.0.0.1:5000/home

Как видите, этот URL-адрес очень уродлив по сравнению со вторым и может раскрывать пользовательские данные. С переменными, которые все еще передаются в шаблон html. Это возможно?

TLDR; Передавайте аргументы и переменные в перенаправление (url_for) без прямой передачи переменных в URL-адрес.


person Nick D    schedule 13.07.2018    source источник