1. 程式人生 > >使用flask-login完成使用者許可權管理

使用flask-login完成使用者許可權管理

首先是文件結構在這裡插入圖片描述

模型中使用者類,繼承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')