首先是文档结构
模型中用户类,继承UserMixin
from flask_login import UserMixin
class User(db.Model,UserMixin):
"""用户类"""
__tablename__='T_U_User'
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(50),unique=True)
password=db.Column(db.String(50))
departmentId=db.Column(db.Integer,db.ForeignKey('T_U_DEPARTMENT.id'))
department=db.relationship('Department',backref=db.backref('user',lazy='dynamic'))
operator=db.Column(db.String(50))
operateTime=db.Column(db.DateTime)
主文件中,声明loginmanager类初始化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager,login_required
app=Flask(__name__,static_url_path='')
app.debug=True
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///./db/manager.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
app.config['SQLALCHEMY_ECHO']=True
app.secret_key='5646465412321swdw'
db=SQLAlchemy(app)
loginmanager=LoginManager()
loginmanager.init_app(app)
loginmanager.session_protection='strong'
loginmanager.login_view='user_manager.login'
loginmanager.login_message='请先登录'
@loginmanager.user_loader
def load_user(user_id):
from model.model import User
user=db.session.query(User).get(user_id)
return user
#导入蓝图
from model.market import market
app.register_blueprint(market)
from model.stock_manager import stock_manager
app.register_blueprint(stock_manager)
from model.user_manager import user_manager
app.register_blueprint(user_manager)
登录视图
class LoginView(MethodView):
"""登录"""
def get(self):
return render_template('login.html')
def post(self):
username=request.form.get('username','').strip()
password=request.form.get('pwd','').strip()
user=db.session.query(User).filter(User.username==username,User.password==password).first()
if not user:
flash('用户名或者密码错误')
return render_template('login.html')
login_user(user)
return render_template('index.html')
登出视图,使用@login_requried,必须是已登录的用户才可以访问,否则会跳转至主文件中设定的视图中去
class LogoutView(MethodView):
"""登出"""
@login_required
def get(self):
logout_user()
return render_template('login.html')