Flask web模板六–Flask-Login完成登录验证

栏目: Python · 发布时间: 6年前

内容简介:在登录视图函数中通过表单提交的数据和数据库中的数据进行对比完成登录验证后可以通过Flask-Login插件实现将登录的信息写入cookie,然后对要求登录的页面进行验证,只有验证通过才能访问指定的页面。1、安装插件并初始化pip install Flask-Login

在登录视图函数中通过表单提交的数据和数据库中的数据进行对比完成登录验证后可以通过Flask-Login插件实现将登录的信息写入cookie,然后对要求登录的页面进行验证,只有验证通过才能访问指定的页面。

1、安装插件并初始化

pip install Flask-Login

在app/__init__.py中导入插件并初始化

-*- coding:utf-8 -*-
# 初始化flask核心对象

from flask import Flask
from app.models.base import db
from app.models.user import User
from flask_login import LoginManager


# 实例化flask登录插件
login_manager = LoginManager()


# 定义一个函数用来创建app核心对象
def create_app():
    app = Flask(__name__)
    # app.config.from_object('config')
    app.config.from_object('app.secure')
    app.config.from_object('app.setting')
    # 调用注册蓝图
    register_blueprint(app)
    # 初始化登录插件
    login_manager.init_app(app)
    # 告诉login插件认证失败是跳转的页面,将登陆页面的视图函数的endpoint告诉login插件
    login_manager.login_view = 'web.login'
    # 跳转后提示信息的定义
    login_manager.login_message = '请先登录或注册'
    # 初始化数据库
    db.init_app(app)
    with app.app_context():
        # 调用生成 mysql 表的函数
        db.create_all()
    return app


#  创建注册蓝图的方法
def register_blueprint(app):
    # 导入蓝图对象
    from app.web.blueprint import web
    app.register_blueprint(web)

2、修改登录视图函数login 编辑 app/web/account.py, 当用户验证完账号密码后浏览器中会有一个cookie

from flask_login import login_user

# 登录视图函数
@web.route('/login/', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if request.method == 'POST' and form.validate():
        user = User.query.filter_by(email=form.email.data).first()
        if user and user.check_password(form.password.data):
            # 将用户信息写入cookie, remember 表示cookie是否长时间生效
            # cookie有效时间需要设置flask配置参数 REMEMBER_COOKIE_DURATION
            login_user(user, remember=True)
            # 获得要跳转的页面,获得url中的next后面的值这个值就是要求登录的页面
            next = request.args.get('next')
            # 如果用户访问的登录页面后没有地址或者为非法地址都跳转到首页
            if not next or not next.startswith('/'):
                next = url_for('web.personal')
            return redirect(next)
        else:
            flash('账号不存在或者密码错误')
    return render_template('login.html', form=form)

3、在app/models/user.py模块中添加一个方法,这是一个独立的方法

# 这个函数是独立的模块函数,不是User模型的方法
# 加上装饰器是让login_manager这个插件加载这个函数,在其他视图函数中可以调用这个函数
@login_manager.user_loader
def get_user(uid):
    # 通过用户的id 来查询用户的模型,uid是主键查询可以不用filer_by可用get
    return User.query.get(int(uid))

4、创建一个视图函数文件app/web/user.py 保存用户信息的视图函数,内容如下

# -*- coding:utf-8 -*-
# 视图函数定义文件,定义和用户相关的视图函数

from .blueprint import web
from flask import session, redirect, render_template
from flask import current_app
from app.models.user import User
from flask_login import login_required, current_user, logout_user


# 登录后个人中心视图函数
@web.route('/personal/')
@login_required
def personal():
    user = User.query.get_or_404(current_user.id)
    user = current_user.summary
    return render_template('personal.html', user=user)


@web.route('/logout/')
def logout():
    logout_user()
    return redirect('web.login')


@web.route('/personal_edit')
@login_required
def personal_edit():
    pass

5、创建用户中心模板文件,在app/templates/下创建personal.html内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>个人中心</title>
</head>
<body>
    <h1>个人中心</h1>
    <table>
        <tr>
            <td>昵称</td>
            <td>邮箱</td>
            <td>电话</td>
        </tr>
        <tr>
            <td>{{ user.nickname }}</td>
            <td>{{ user.email }}</td>
            <td>{{ user.phone_number }}</td>
        </tr>
    </table>
    <a href="{{ url_for('web.personal_edit') }}">修改</a>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tales from Facebook

Tales from Facebook

Daniel Miller / Polity Press / 2011-4-1 / GBP 55.00

Facebook is now used by nearly 500 million people throughout the world, many of whom spend several hours a day on this site. Once the preserve of youth, the largest increase in usage today is amongst ......一起来看看 《Tales from Facebook》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具