在主线程中启动的中间件WSGI应用程序的Flask全局登录

问题描述

在我的flask应用程序中,我还有另一个WSGI应用程序,需要在主线程中启动。我已经在其他端点进行了登录要求检查,但是,可以使用其端点访问WSGI中间件应用程序而无需登录。是否可以强制登录才能访问中间件应用程序?

from flask import Flask,render_template,request,session,redirect,url_for
import flask
import os
import logging
import functools
import tensorboard as tb
from werkzeug import serving
from werkzeug.middleware import dispatcher


# Log transport
logging.basicConfig(level=logging.DEBUG)

HOST = "0.0.0.0"
PORT = 8080
USERS = {"user": ("user","xxx")}

app = Flask(__name__)
app.secret_key = "yyy"

def login_required(func):
    @functools.wraps(func)
    def secure_function(*args,**kwargs):
        if "username" not in session:
            return redirect(url_for("login",next=request.url))
        return func(*args,**kwargs)

    return secure_function


@app.route("/",methods=["GET","POST"])
def login():
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")

        if username in USERS and USERS[username][1] == password:
            session["username"] = username
            return redirect("http://%s:%s/tensorboard/" % (HOST,PORT))
    return render_template("login.html")

# tensorboard server that needs to be started in main thread
class CustomServer(tb.program.TensorBoardServer):
    def __init__(self,tensorboard_app,flags):
        del flags  # unused
        self._app = dispatcher.DispatcherMiddleware(
            app,{"/tensorboard": tensorboard_app}
        ) # how to include login_required? 

    def serve_forever(self):
        serving.run_simple(HOST,PORT,self._app)

    def get_url(self):
        return "http://%s:%s" % (HOST,PORT)

    def print_serving_message(self):
        pass  # Werkzeug's `serving.run_simple` handles this

def start_tensorboard():
    program = tb.program.TensorBoard(server_class=CustomServer)
    program.configure(logdir="tensorboard_data/")
    program.main()

def main():
    start_tensorboard()


if __name__ == "__main__":
    main()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...