Я пытаюсь создать веб-сайт, который позволяет людям получать доступ к различным видам графиков в приложении для тире. Я хочу, чтобы пользователи вошли в систему с именем пользователя и паролем, прежде чем они смогут получить доступ к панели управления. Это то, что у меня есть
from flask import Flask, flash, render_template, request, session
import os, dash
import dash_html_components as html
import dash_core_components as dcc
import flask
app = Flask(__name__)
dash_app = dash.Dash(__name__, server=app, url_base_pathname='/dash_app')
dash_app.config['suppress_callback_exceptions']=True
def index_page():
index = html.Div([
dcc.Link('Page 1', href='/page1'),
html.Br(),
dcc.Link('Page 2', href='/page2'),
html.Br(),
dcc.Link('Page 3', href='/page3'),
html.Br()
])
return index
dash_app.layout = html.Div(children=[
dcc.Location(id='url', refresh=False),
html.Div(id = 'page-content')
])
page_1 = html.Div([
html.H1('Welcome to page 1'),
index_page()
])
page_2 = html.Div([
html.H1('Welcome to page 2'),
index_page()
])
page_3 = html.Div([
html.H1('Welcome to page 3'),
index_page()
])
@dash_app.callback(
dash.dependencies.Output('page-content','children'),
[dash.dependencies.Input('url','pathname')]
)
def display_page(pathname):
if pathname == '/page1':
return page_1
if pathname == '/page2':
return page_2
if pathname == '/page3':
return page_3
else:
return index_page()
@app.route('/')
def home():
if not session.get('logged_in'):
return render_template('login.html')
else:
return flask.redirect('/dash_app')
@app.route('/login', methods=['POST'])
def do_admin_login():
if request.form['password'] == 'password' and request.form['username'] == 'admin':
session['logged_in'] = True
else:
flash('wrong password!')
return home()
if __name__ == "__main__":
app.secret_key = os.urandom(12)
app.run(debug=True, port=5000)
Я хочу решить две проблемы:
При такой настройке вам не нужно входить в систему, чтобы получить доступ к панели управления. Если вместо ввода имени пользователя и пароля вы перейдете прямо к http: // локальный: 5000 / dash_app, вы сразу увидите панель управления. Я хочу предоставить доступ только тем людям, которые вошли в систему.
Если я обновляю страницу в браузере, после нажатия на одну из трех ссылок на страницу я получаю сообщение «Не найдено»:
I не понимает, почему это происходит, и мне кажется, что это имеет какое-то отношение к структуре приложение.
Вопрос: Как решить эти две проблемы? И, в более общем смысле; соответствует ли эта структура цели, которую я пытаюсь достичь? Это правильный способ настроить панель инструментов внутри приложения Flask? (Я знаю, что такая настройка входа небезопасна)
Редактировать: Что касается проблемы с обновлением, я уверен, что она имеет какое-то отношение к тому, что приложение Dash запускается внутри приложения flask, потому что, когда я запускаю приложение Dash само по себе, я могу обновить http: // локальный: 5000 / страница1, и оно успешно отрисовывается.





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