Flask-Login 用户登录

Flask-Login提供Flask的用户会话管理。它处理登录,注销和记住用户会话的常见任务。

它会:
1.将活动用户的ID存储在会话中,让您轻松登录和注销。
2.让您将视图限制为已登录(或已注销)用户。
3.处理通常令人毛骨悚然的“记住我”功能。
4.帮助保护您的用户会话免遭Cookie小偷窃取。
5.稍后可能与Flask-Principal或其他授权扩展集成。
但是,它不会:
1.对您强加特定的数据库或其他存储方法。您完全负责用户的加载方式。
2.限制您使用用户名和密码,OpenID或任何其他身份验证方法。
3.处理超出“是否登录”权限的权限。
4.处理用户注册或帐户恢复。

-安装flask-login

$ pip install flask-login
  • 完整的项目结构
    其中app.db为项目运行后生成

环境变量

  • 安装 python-dotenv,避免了每次运行代码都要定义环境变量
pip install python-dotenv
  • 根目录新建.flaskenv环境变量文件
FLASK_APP=microblog.py
  • microblog.py
from app import app, db #从初始化模块中导入
from app.models import User, Post

@app.shell_context_processor
def make_shell_context():
    return {
   'db': db, 'User': User, 'Post': Post}
  • 数据库配置项
    config.py
import os
basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

app.db 项目运行后产生

  • 初始化模块 init.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config
from flask_login import LoginManager

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app) #向数据库中增加数据
migrate = Migrate(app, db) #数据库迁移功能
login = LoginManager(app) #用来保存用于记录的位置
login.login_view = 'login'

from app import routes, models
  • 用户加载模块
    1.定义用户数据库模型
    2.加载数据库匹配用户

用户类别:
在这里插入图片描述
如果继承UserMixin类,则默认实现了上述方法;

  • app/models.py
from datetime import datetime
from app import db, login
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin


class User(UserMixin,db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

@login.user_loader
def load_user(id):
    return User.query.get(int(id))

class Post(db.Model):
    id = db.Column(db.Integer, primary_key
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值