I am learning python with flask, flask-mysqlbd, flask-login and flask-WTF for web development at the moment and I would like to solve this doubt.
How can I pass data between routes?
I come from .net core 6 and for example to share data I used a lot of viewbags or tempdata to pass data between routes or between routes and templates to give an example.
I have this code and I would like to share the user variable that creates the route login with the route edit_user
db = MySQL(app)
login_manager_app = LoginManager(app)
@login_manager_app.user_loader
def load_user(id):
return ModelUser.get_by_id(db, id)
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login', methods = ['GET', 'POST'])
def login():
if request.method == 'POST':
user = User(0, request.form['username'], request.form['password'])
logged_user = ModelUser.login(db, user)
if logged_user != None:
if logged_user.password:
if logged_user.roll == "administrador":
login_user(logged_user)
return redirect(url_for('home_Admin'))
else:
if logged_user.roll == "comun":
login_user(logged_user)
return redirect(url_for('home_Comun'))
else:
flash("No tienes un rol designado...")
return render_template('auth/login.html')
else:
flash("Contraseña incorrecta...")
return render_template('auth/login.html')
else:
flash("Usuario no encontrado...")
return render_template('auth/login.html')
else:
return render_template('auth/login.html')
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/home_Admin')
@login_required
def home_Admin():
return render_template('home/home_Admin.html')
@app.route('/edit_user')
@login_required
def edit_user():
return render_template('panel_admin/edit_user.html')
My idea is that with an if, when accessing route edit_user, check if the user is administrator or common, in the case of being common, I want it to be redirected to login, for that I want to use this.
@app.route('/edit_user')
@login_required
def edit_user():
logged_user = ModelUser.login(db, user)
if logged_user.roll == "comun":
flash("No tienes permisos...")
return redirect(url_for('login'))
else:
flash("No tienes un rol designado...")
return render_template('panel_admin/edit_user.html')
what will be the way to share data between routes?