问题描述
在我的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 (将#修改为@)