Настройка приборной панели Python внутри приложения Flask

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

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, вы сразу увидите панель управления. Я хочу предоставить доступ только тем людям, которые вошли в систему.

  • Если я обновляю страницу в браузере, после нажатия на одну из трех ссылок на страницу я получаю сообщение «Не найдено»: Настройка приборной панели Python внутри приложения FlaskI не понимает, почему это происходит, и мне кажется, что это имеет какое-то отношение к структуре приложение.

Вопрос: Как решить эти две проблемы? И, в более общем смысле; соответствует ли эта структура цели, которую я пытаюсь достичь? Это правильный способ настроить панель инструментов внутри приложения Flask? (Я знаю, что такая настройка входа небезопасна)

Редактировать: Что касается проблемы с обновлением, я уверен, что она имеет какое-то отношение к тому, что приложение Dash запускается внутри приложения flask, потому что, когда я запускаю приложение Dash само по себе, я могу обновить http: // локальный: 5000 / страница1, и оно успешно отрисовывается.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
1 662
1

Ответы 1

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

Другие вопросы по теме