我正在用 python 中的 flask 创建我的第一个网络应用程序,但我正在努力解决用户登录问题。
if current_user.is_authenticated
:
app.py
from flask import Flask, render_template, url_for, request, redirect, flash
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
from config import config
from models.ModelUser import ModelUser
from models.entities.User import User
app = Flask(__name__)
import pandas as pd
db = pd.read_csv(r"C:\Users\clcastillof\Github\notas_oms\app\test_credentials\credentials.csv")
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:
login_user(logged_user)
print('user logged: ' + current_user.username) if current_user.is_authenticated else print('user not logged in')
return redirect(url_for('upload'))
else:
flash("Credenciales incorrectas.")
return render_template('login.html')
else:
flash("Credenciales incorrectas.")
return render_template('login.html')
else:
return render_template('login.html')
@app.route("/logout")
def logout():
logout_user()
return redirect(url_for('login'))
@app.route("/upload")
# @login_required
def upload():
print('user logged: ' + current_user.username) if current_user.is_authenticated else print('user not logged in')
return render_template('upload.html')
@app.route("/sent")
# @login_required
def sent():
return render_template('sent.html')
if __name__ == '__main__':
app.config.from_object(config['development'])
app.run()
配置.py
class Config:
SECRET_KEY = 'my_secret_key'
class DevelopmentConfig(Config):
DEBUG = True
config = {
'development': DevelopmentConfig
}
模型用户.py
from .entities.User import User
import pandas as pd
class ModelUser():
@classmethod
def login(self, db, user):
try:
db = db.set_index('username')
if user.username in db.index:
user = User(db.loc[user.username, 'id'],
user.username,
User.check_password(db.loc[user.username, 'password'], user.password))
return user
else:
return None
except Exception as e:
raise Exception(e)
@classmethod
def get_by_id(self, db, id):
try:
db = db.set_index('id')
if id in db.index:
logged_user = User(id,
db.loc[id, 'username'],
None)
return logged_user
else:
return None
except Exception as e:
raise Exception(e)
用户.py
from werkzeug.security import check_password_hash, generate_password_hash
from flask_login import UserMixin
class User(UserMixin):
def __init__(self, id, username, password) -> None:
self.id = id
self.username = username
self.password = password
@classmethod
def check_password(self, hashed_password, password):
return check_password_hash(hashed_password, password)
我目前正在从 .csv 中检索凭证,只是为了学习目的,请忽略它。