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

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

内容简介:在登录视图函数中通过表单提交的数据和数据库中的数据进行对比完成登录验证后可以通过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>

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

查看所有标签

猜你喜欢:

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

长尾理论

长尾理论

[美]克里斯•安德森 (Chris Anderson) / 乔江涛、石晓燕 / 中信出版社 / 2012 / 68.00元

网络经济正如火如荼地发展着,长尾理论无疑成为当代商务人士最为关注的焦点之一。不论是关于长尾理论的溢美还是论战,都代表了其备受关注的程度。 《长尾理论》是克里斯•安德森对这些争论的最明确的回答。在书中,他详细阐释了长尾的精华所在,指出商业和文化的未来不在于传统需求曲线上那个代表“畅销商品”的头部,而是那条代表“冷门商品”的经常被人遗忘的长尾。他还揭示了长尾现象是如何从工业资本主义原动力——规模......一起来看看 《长尾理论》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具