Форум программистов, компьютерный форум, киберфорум
Python: Flask
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121

Личный кабинет Flask

03.02.2018, 12:02. Показов 2892. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Пытаюсь реализовать вход в личный кабинет.

Схема входа следующая:

* пользователь вводить в форме на странице логин и пароль, нажимает энтер
* после нажатия энтера начинает отрабатываться ajax запрос по jQuery к скрипту на питоне
* далее срабатывает функция validate_user(), которая после запроса в базу отдает true или false
* если false - значит пользователь не валидный и соединение сбарсывается, если true, то выполняется следующий ajax запрос к питоновской функции user_login()
* в этой функции по пользователю собираются все данные (посредством запросов в базу) и далее происходит редирект на страницу personal_account, которая загружает файл private.html, на которой должен отрисоваться прямоугольник на canvas

Проблема заключается в последнем шаге, когда происходит редирект на страницу /personal_account, почему-то URL не меняется,
и не срабатывают js скрипты. При просмотре кода в брузере видно, что private.html отображается, файлы js подключаются. При просмотре кода страницы-отображается код изначальной страницы, с которой был сделан запрос и ее же url.js не находит canvas.

private.html - используются шаблоны jinja2, страница личного кабинета
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{% block tab_content %}
    <canvas width="800" height="600" id="canvas"></canvas>
    <script>
        window.onload = init;
        function init(){
            console.log('работает');
            var canvas = document.getElementById('canvas');
            if (canvas) {
                if (canvas.getContext) {
                    var ctx = canvas.getContext('2d');
 
                    ctx.fillRect(25, 25, 100, 100);
                }
            }
        }
    </script>
{% endblock %}
common.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{% block tab_content %}
    <canvas width="800" height="600" id="canvas"></canvas>
    <script>
        window.onload = init;
        function init(){
            console.log('работает');
            var canvas = document.getElementById('canvas');
            if (canvas) {
                if (canvas.getContext) {
                    var ctx = canvas.getContext('2d');
 
                    ctx.fillRect(25, 25, 100, 100);
                }
            }
        }
</script>
{% endblock %}
Функция validate_user()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@app.route('/validate_user', methods=['POST'])
def validate_user():
    login = request.form['login']
    password = request.form['password']
 
    try:
        c, conn = cursor_connection()
        c = conn.cursor()
        c.execute("SELECT hsh "
                  "FROM auth_info "
                  "WHERE login='{}'  ; "
                  "".format(login, password))
 
        res = c.fetchall()[0][0]
        c.close()
        conn.close()
 
    except Exception as e:
        logger.info(msg='Failed to execute /validate_user {}'.format(e))
        return render_template('500.html')
 
    if check_password_hash(password=password, pwhash=res):
        return jsonify({'result': True})
    return jsonify({'result': False})
И функция user_login()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@app.route('/user_login', methods=['POST'])
def user_login():
    login = request.form['login']
    if login is None or not login:
        return jsonify(data='Incorrect URL')
 
    try:
        c, conn = cursor_connection()
        c = conn.cursor()
        c.execute("SELECT accounts_info_uid "
                  "FROM auth_info WHERE login='{}' ".format(login))
 
        id = c.fetchall()
        if not id:
            return jsonify(data='Incorrect login')
 
        c.execute("SELECT * FROM boxes_id AS tb1 LEFT JOIN"
                  " accounts_info AS tb2 ON tb2.boxes_ids=tb1.uid "
                  # "LEFT JOIN electricity_info as tb3 ON tb3.boxes_id_uid=tb1.uid"
                  " WHERE tb2.uid={} ".format(id[0][0]))
 
        uid, mc_address, working_status, activation_status, _,\
        first_name, second_name, registration_date, phone, email, boxes_id = c.fetchall()[0]
        c.execute(" SELECT consumed_electricity "
                  "FROM electricity_info "
                  "WHERE boxes_id_uid={} ".format(boxes_id))
        consumed_electricity = [float(val[0]) for val in c.fetchall()]
        c.close()
        conn.close()
 
    except Exception as e:
        logger.error(msg='Cannot execute /user_login {}'.format(e))
        return str(e)
 
    user = User()
    user.id = login
    login_user(user)
    return redirect(url_for('welcome'))
Используемые технологии: flask, python 2.7, jinja2, ajax, jquery

Подскажите пожалуйста, в чем тут проблема, что неправильно?
Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2018, 12:02
Ответы с готовыми решениями:

Личный кабинет с использованием flask и jinja2
Здравствуйте. Использую фреймворк flask, шаблонизатор jinja2. Стоит задача сделать вход в личный кабинет пользователя. В приложении...

Подключить PostgreSQL к Flask API и передавать данные таблицы в flask
Нужна срочная и большая помощь, надеюсь только на вас. Есть Python+QT5 (PYQT5) приложение. В таблицу приложения (QTableWidget)...

Джанго. Личный кабинет
Здравствуйте, не могу понять почему во view в методе UserAccountView current_user ничего не принимает . Как испаравить данную проблему. ...

3
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
03.02.2018, 12:33
Выложи проект на github, bitbucket и т д тогда можно будет глянуть, что к чему.

Цитата Сообщение от lipton_v Посмотреть сообщение
python 2.7
Лучше бери python 3.6, двойка это дикое старье.
0
1 / 1 / 1
Регистрация: 20.03.2017
Сообщений: 121
03.02.2018, 13:28  [ТС]
Случайно дублировался код. Исправляю common.js. И дополняю функцией welcome

common.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
document.getElementById('next_in').onclick = function (){  //after hitting enter
    $.ajax({
        data: {
            login: document.getElementById('log').value,
            password: document.getElementById('pass').value
        },
        type: 'POST',
        url: '/validate_user',
        success: function (data_1) {
            if(data_1.result==true){
                $.ajax({
                    data: {
                        login: document.getElementById('log').value
                    },
                    type: 'POST',
                    url: '/user_login',
                    success: function (data_2) {
                        document.body.innerHTML = data_2;
                    }
 
                });
            }
            else{
                alert('Incorrect user or login!');
            }
        }
    });
}
функция welcome
Python
1
2
3
@app.route('/welcome')
def welcome():
    return render_template('private.html')
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
03.02.2018, 13:30
lipton_v, твои куски кода не интересно ни кому собирать во едино, собери проект и залей его на bitbacket, github или просто архивом на форум.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2018, 13:30
Помогаю со студенческими работами здесь

Личный кабинет пользователя
Здравствуйте, не могли бы вы мне помочь разобраться со следующей проблемой. Когда пользователь заходит в систему. Затем заходит нажимает...

Selenium, МТС Личный кабинет
Здравствуйте. С недавних пор возникли проблемы с входом в личный кабинет МТС. Если все делаю руками, то все ок, а с помощью seltnium -...

Как войти в личный кабинет?
Всем привет. Пытаюсь войти в личный кабинет https://sd.tom.ru/ через модуль requests и ничего не получается :( Покажите как код нужно...

Создать личный кабинет (Django)
Привет всем. 5 дней изучаю питон, прошу сильно не пинать. Прошел курс на ютуьбе, теперь стараюсь сам программировать :) В общем...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru