I
I
Ivan0_02021-10-15 12:55:34
Flask
Ivan0_0, 2021-10-15 12:55:34

Redirect sends a GET request but doesn't render the page itself. What is the problem?

When creating a registration for the site, there was a problem that redirect does not redirect to the authorization page. Despite the fact that the GET request is sent, but the page itself is not loaded. What is wrong?

Python

from flask import Flask, url_for, render_template, request, g, session, redirect, make_response
import jinja2
import mysql.connector
import json


app = Flask (__name__, template_folder = '../templates', static_folder = '../static')


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

url = ''
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        data = json.loads(request.data)

    print('ok')
    return render_template('login.html')


@app.route('/registration', methods=['GET', 'POST'])
def registration():
    if request.method == 'POST':
        data = json.loads(request.data)
        name = data['name']
        print(name)
        return redirect(url_for('login'))
        
    return render_template('registration.html')


if __name__ == '__main__':
    app.run(debug=True)


Javascript registration
let form = document.getElementById('form');

let registration_url = '/registration' // обработчик для url

// флаги данных для проверки
let correct_name = false;
let correct_full_name = false;
let correct_login = false;
let correct_email = false;
let correct_password = false;
let correct_password2 = false;
let correct_tel = false;
let numbers_in_password = 0;
let symbols_in_password = 0;

// проверочные данные
let english_symbols = '[email protected]#$%^&*()_+-=[]{}|.,`~§';
let numbers = '1234567890';

// поля для ввода данных
let tel_input = document.getElementById('tel');

let password_input = document.getElementById('password1');
let password_input2 = document.getElementById('password2');

let data_inputs = document.querySelectorAll('.data_input');
let data_inputs_containers = document.querySelectorAll('.input_container');

let submit_button = document.getElementById('submit_button');

let name_input = document.getElementsByName('name')[0];
let full_name_input = document.getElementsByName('full_name')[0];
let login_input = document.getElementsByName('login')[0];
let email_input = document.getElementsByName('email')[0];

// поля для вывода ошибок
let incorrect_name = document.getElementsByClassName('incorrect_text')[0];
let incorrect_full_name = document.getElementsByClassName('incorrect_text')[1];
let incorrect_login = document.getElementsByClassName('incorrect_text')[2];
let incorrect_email = document.getElementsByClassName('incorrect_text')[3];
let incorrect_password = document.getElementsByClassName('incorrect_text')[4];
let incorrect_password2 = document.getElementsByClassName('incorrect_text')[5];
let incorrect_tel = document.getElementsByClassName('incorrect_text')[6];

// фильтр для проверки валидности номера телефона
tel_input.addEventListener('input', function(){
    if(tel_input.value.length >= 1){
        tel_input.value = '+' + tel_input.value.replace(/\D/g, '');// удаление всего кроме цифр и авто добавление +
    }
    if(tel_input.value == '+' || tel_input.value == ' '){
        tel_input.value = '';// авто удаление пробелов и плюсов
    }
});

let eye_button = document.getElementById('eye_button');// кнопка видимости

// эффект при нажатии на поле ввода
for(let i = 0; i < data_inputs.length; i++){
    data_inputs[i].addEventListener('focus', function(){
        data_inputs_containers[i].setAttribute('class', 'active_input_container');
    });
    data_inputs[i].addEventListener('blur', function(){
        data_inputs_containers[i].setAttribute('class', 'input_container');
    });
}

//Видимость и невидимость пароля при вводе
eye_button.addEventListener('click', function(){
    if(password_input.getAttribute('type') == 'password'){
        eye_button.innerHTML = `
            <i class="far fa-eye-slash"></i>
        `;
        password_input.setAttribute('type', 'text');
        password_input2.setAttribute('type', 'text');   
    }else if(password_input.getAttribute('type') == 'text'){
        eye_button.innerHTML = `
            <i class="far fa-eye"></i>
        `;
        password_input.setAttribute('type', 'password');
        password_input2.setAttribute('type', 'password'); 
    }
});

form.addEventListener('submit', function(e){
    e.preventDefault();
    //ограничения для названия компании
    if(name_input.value == ''){
        incorrect_name.innerHTML = 'Введите название компании пожалуйста.';
        correct_name = false;
    }else if(name_input.value.length < 2){
        incorrect_name.innerHTML = 'Вы ввели слишком короткий название.';
        correct_name = false;
    }else{
        incorrect_name.innerHTML = '';
        correct_name = true;
    }
    //ограничения для полного названия компании
    if(full_name_input.value == ''){
        incorrect_full_name.innerHTML = 'Введите название компании пожалуйста.';
        correct_full_name = false;
    }else if(full_name_input.value.length < 2){
        incorrect_full_name.innerHTML = 'Вы ввели слишком короткий название.';
        correct_full_name = false;
    }else{
        incorrect_full_name.innerHTML = '';
        correct_full_name = true;
    }
    // ограничения для логина компании
    if(login_input.value == ''){
        incorrect_login.innerHTML = 'Введите логин компании пожалуйста.';
        correct_login = false;
    }else if(login_input.value.length < 2){
        incorrect_login.innerHTML = 'Вы ввели слишком короткий логин.';
        correct_login = false;
    }else if(login_input.value.indexOf(' ') != -1){
        incorrect_login.innerHTML = 'Логин не должен содержать пробелы. Вместо их может использовать "_".';
        correct_login = false;
    }else{
        for(let i = 0;i < login_input.value.length; i++){
            if(english_symbols.indexOf(login_input.value[i]) == -1 && numbers.indexOf(login_input.value[i]) == -1){
                console.log(login_input.value[i])
                incorrect_login.innerHTML = 'Логин должен содержать только латынские символы или цифры.';
                correct_login = false;
                break;
            }else{
                incorrect_login.innerHTML = '';
                correct_login = true;
            }
        }
    }
    // ограничения для электронной почты компании
    if(email_input.value == ''){
        incorrect_email.innerHTML = 'Введите электронную почту пожалуйста.';
        correct_email = false;
    }else if(email_input.value.indexOf('@') == 0 || email_input.value.indexOf('@') == email_input.value.length-1 || email_input.value.indexOf('@') == -1){
        incorrect_email.innerHTML = 'Не верный формат электронной почты.';
        correct_email = false;
    }else{
        incorrect_email.innerHTML = '';
        correct_email = true;
    }
    // ограничения для пароля
    symbols_in_password = 0;
    numbers_in_password = 0;
    if(password_input.value == ''){
        incorrect_password.innerHTML = 'Введите пароль пожалуйста.';
        correct_password = false;
    }else if(password_input.value.length < 6){
        incorrect_password.innerHTML = 'Вы ввели слишком короткий пароль.';
        correct_password = false;
    }else{
        for(let i = 0;i < password_input.value.length; i++){
            if(english_symbols.indexOf(password_input.value[i]) != -1){
                correct_password = false;
                symbols_in_password += 1;
            }
            if(numbers.indexOf(password_input.value[i]) != -1){
                correct_password = false;
                numbers_in_password += 1;
            }
        }
        if(numbers_in_password < 1){
            incorrect_password.innerHTML = 'В Вашем пароле должны быть цифры.';
            correct_password = false;
        }
        if(symbols_in_password < 1){
            incorrect_password.innerHTML = 'Пароль должен содержать латынские символы.';
            correct_password = false;
        }
        if(numbers_in_password >= 1 && symbols_in_password >= 1 && password_input.value.length >= 6){
            incorrect_password.innerHTML = '';
            correct_password = true;
        }
    }
    // ограничения для поворения пароля
    if(password_input2.value == ''){
        incorrect_password2.innerHTML = 'Повторите пароль пожалуйста.';
        correct_password2 = false;
    }else if(password_input2.value != password_input.value){
        incorrect_password2.innerHTML = 'Не верный пароль.';
        correct_password2 = false;
    }else{
        incorrect_password2.innerHTML = '';
        correct_password2 = true; 
    }
    // ограничения для номера телефона
    if(tel_input.value == ''){
        incorrect_tel.innerHTML = 'Введите пароль пожалуйста.';
        correct_tel = false;
    }else if(tel_input.value.indexOf('+') == -1){
        incorrect_tel.innerHTML = 'Не верный формат номера телефона.';
        correct_tel = false;
    }else{
        incorrect_tel.innerHTML = '';
        correct_tel = true;
    }

    // console.log(correct_name);
    // console.log(correct_full_name);
    // console.log(correct_login);
    // console.log(correct_email);
    // console.log(correct_password);
    // console.log(correct_password2);
    // console.log(correct_tel);

    if(correct_name && correct_full_name && correct_login && correct_email && correct_password && correct_password2 && correct_tel){
        let data = {
            'name': name_input.value,
            'full_name': full_name_input.value,
            'login': login_input.value,
            'email': email_input.value,
            'password': password_input.value,
            'tel': tel_input.value
        }
        fetch(registration_url, {method: 'POST', body: JSON.stringify(data)});
    }

});


61694e342cf05047512070.png

Answer the question

In order to leave comments, you need to log in

1 answer(s)
B
BonusZero, 2021-10-20
@TheSimonSays

I think the problem is:
e.preventDefault();
Try to drop js.
For such purposes, flask-wtf is better ( https://flask-wtf.readthedocs.io/en/0.15.x/ )

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question