在Flask HTML模板中显示tempfile图像?

2024-10-04 05:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试建立一个双因素认证系统,我想在注册页面上显示一个二维码供用户扫描,然后立即删除图像

以下是我到目前为止的想法:

@app.route('/register', methods = ['POST', 'GET'])
def register():
    with tempfile.NamedTemporaryFile(suffix=".png", dir="static/images") as qrimg:
        form = RegisterForm(request.form)

        username = form.username.data
        password = form.password.data
        twofactorpass = form.twofactor.data

        twofactor = pyotp.random_base32()
        twofactorkey = pyotp.TOTP(twofactor)
        qrstring = twofactorkey.provisioning_uri(name='x', issuer_name="x")
        qr = qrcode.make(qrstring)
    
        qr.save(qrimg)

        if request.method == "POST" and form.validate():        
            if twofactorpass == twofactorkey.now():
                return redirect(url_for("register"))
            else:
                return redirect(url_for("register"))

        return render_template("register.html", form = form, img = os.path.basename(os.path.normpath(qrimg.name)))

我现在的问题是tempfile在呈现HTML之前会删除自身,但据我所知,“return render_template()”部分必须在最后

那么,有什么方法可以在呈现HTML后关闭tempfile呢?我愿意接受任何建议,因为我猜有更好的方法来做到这一点


Tags: nameformregisterdatareturnrequestusernamepassword