0
0 комментариев

Пытаюсь реализовать вход в личный кабинет.
Схема входа следующая:

  • пользователь вводить в форме на странице логин и пароль, нажимает энтер
  • после нажатия энтера начинает отрабатываться 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, страница личного кабинета

{% 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

    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!');
            }
        }
    });
}

Функция validate_user()

@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()

@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

В чем тут проблема, что неправильно?

EDIT1

функция welcome

@app.route('/welcome')
def welcome():
    return render_template('private.html')

Хочется получить «чистый» редирект на private.html с отрисовкой прямоугольника на canvas и изменением URL на /welcome


Добавить комментарий