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

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

03.02.2018, 12:02. Показов 2964. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru