Backend Flask не перенаправляет после запроса - PullRequest
0 голосов
/ 06 августа 2020

Я делаю страницу, на которой пользователь выбирает элементы, подтверждает свой выбор, затем данные отправляются на серверную часть и создается файл .csv. После создания файла я хочу, чтобы пользователь был перенаправлен на страницу, где он может загрузить файл, однако

return render_template("tools/downloadfile.html", document=name)

не перенаправляет пользователя на эту или любую другую страницу. В консоли ошибок нет, файл создан, но перенаправления на страницу нет. Вы хоть представляете, что могло вызвать это?

@app.route('/createdocument', methods=['POST', 'GET'])
#@login_required
def create_document():
    playlists = get_playlists()
    if request.method == "POST": 
        request_data = str(request.data.decode('UTF-8'))
        genre = get_header_genre(request_data)
        parsed_data = parse_request(request_data)           
        playlist_names = get_parsed_playlists(parsed_data)
        if genre == "playlist":
            #make_playlist_doc(playlist_names, genre)
            print("playlist option not ready yet")
        elif genre == "socan":
            name = make_socan_doc(playlist_names, genre)
            return render_template("tools/downloadfile.html", document=name)
        else:
            print("other request:")
            print(str(request.data.decode('UTF-8')))
    return render_template("tools/createdocument.html", playlists=playlists)

1 Ответ

1 голос
/ 06 августа 2020

Причина, по которой это не работает, заключается в том, что ваш браузер отправляет запрос POST, чтобы отправить форму в ваше приложение Flask, и в результате не ожидает, что новая веб-страница будет отображена обратно в него.

Вместо этого вы можете попробовать вернуть redirect() (я не тестировал это сам, но из docs ), например

def create_document():
    playlists = get_playlists()
    if request.method == "POST": 
        # code removed
        if genre == "playlist":
            #make_playlist_doc(playlist_names, genre)
            print("playlist option not ready yet")
        elif genre == "socan":
            name = make_socan_doc(playlist_names, genre)
            return redirect("http://www.example.com", code=302)
    return render_template("tools/createdocument.html", playlists=playlists)

В качестве альтернативы вы должны отправьте запрос POST и после его успешного завершения сделайте запрос GET, чтобы запросить новую страницу.

Ian

...