Python Flask学习_使用flask-login实现认证蓝本(一)

蓝本可以认为是一类路由的集合。一个Web App实现多个蓝本的目的是,把不同的路由分开,便于维护。

再来复习一下,创建蓝本。

1、在app包下创建新package,命名为auth。

2、创建蓝本对象实例

# app/auth/__init__.py
from flask import Blueprint                            #引入Blueprint类

auth = Blueprint('auth',__name__)                        #创建实例

from . import views                                      #引入app/auth/views.py

3、实现视图函数

# app/auth/views.py

@auth.route('/login')
def login():
    return render_template('auth/login.html')            

注意Flask认为模板的路径是相对于程序模板文件夹而言的(即app/templates)。因此,render_template('auth/login.html')中的'auth/login.html'其实是auth/templates/auth/login.html

4、在app中注册auth蓝本

# app/__init__.py
def create_app(config_name):
    #...
    from .auth import auth as auth_blueprint                            #引入蓝本实例
    app.rgister_blueprint(auth_blueprint,url_prefix='/auth')            #注册蓝本到app
    return app


下面进入正文

Flask-Login是专门用来管理用户认证系统中的认证状态,且不依赖特定的认证机制。

使用前,还是老规矩安装:

扫描二维码关注公众号,回复: 1800466 查看本文章
# pyCharm Terminal
pip install flask-login

一、准备用于登录的用户模型

想要使用Flask-Login扩展,用户模型(对应数据库中的User表)必须实现的方法有:


但是,更简单的方法是:使用flask_login.UserMixin类。UserMixin类有上述四个方法的默认实现,且能满足大多数需求。

使用方法是。直接继承就可以。

还记得,ORM的模型改了,要把更改提交到数据库需要怎么做吗?

二、Flask-Login在程序工厂函数中初始化

from flask_login import LoginManager
login_manager = LoginManager()                                #创建实例
login_manager.session_protection = 'strong'                    #用户认证的保护级别
login_manager.login_view = 'auth.login'                        #设置登录页面的端点

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    #...
    login_manager.init_app(app)                             #注册到app                        

三、实现一个回调函数

Flask-Login要求程序实现一个回调函数,使用指定的标识符加载用户。

# app/models.py
from . import login_manager
@login_manager.user_loader                                              #flask-login要求实现的回调函数
def load_user(user_id):
    return User.query.get(int(user_id))
回调函数,接受以Unicode字符串形式表示的用户标识符,在数据库中用用户标识符查找。如果能找到返回用户对象,否则 返回None。







猜你喜欢

转载自blog.csdn.net/bird333/article/details/80852793