декоратор @after_this_request не работает - PullRequest
0 голосов
/ 12 февраля 2019

Я изучаю Flask, так что прости меня, если вопрос кажется тривиальным.Я создаю очень простое приложение, генерирующее облако слов (в формате .png) из текста, вставленного в форму.Проблема в том, что я хочу удалить изображение после его передачи пользователю.

Я пытался использовать декоратор @after_this_request, но, похоже, он не работает (даже функция печати, которую вы можете увидеть в коде ниже)).

from flask import Flask, request, render_template, after_this_request
import wordcloud
import time
import os

app=Flask (__name__)

@app.after_request
def add_header (r):
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    return r

@app.route ("/")
def main ():
    return render_template ("main.html")

@app.route ("/result", methods=["GET","POST"])
def result ():

    ts=str(time.time())

    if request.method == "POST":
        wc=wordcloud.WordCloud (width=1920, height=1080).generate (request.form["text"])
        wc.to_file ("static/wc_"+ts+".png")
        return render_template ("result.html", ts=ts)

    @after_this_request
    def remove_file (response):
        print ("Test")
        os.remove ("static/wc_"+ts+".png")
        return response

app.run ()

Я ожидаю, что изображения будут удалены.Я запускаю это на MacOSX, если это может помочь ...

Любой совет?Заранее спасибо!

1 Ответ

0 голосов
/ 13 февраля 2019

Python - это динамический язык, поэтому все оценивается во время выполнения.Для оценки блока @after_this_request интерпретатор python сначала должен достичь этих строк кода.Но с return render_template ... оценка функции result завершается, а кодовый блок @after_this_request никогда не достигается и не обрабатывается, как будто его никогда не было.Попробуйте переместить этот блок в начало функции result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...