内容简介:在登录视图函数中通过表单提交的数据和数据库中的数据进行对比完成登录验证后可以通过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>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- spring-boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息
- 表单正则验证及文件上传验证功能
- angular 实现同步验证器跨字段验证
- Spring Security验证流程剖析及自定义验证方法
- TensorFlow 推出数据验证函数库 TFDV,用于分析和验证
- TensorFlow 推出数据验证函数库 TFDV,用于分析和验证
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。