Flask-Login一些使用解释(根据官网和个人查找资料的理解并解释)
文章目录
- 1.一些主要的文字解释:
- 2.细节结合程序解释:
- (1)首先看一下相关的界面设计:
- (2)首先对程序中的数据库部分代码截图解释:
- (3)对使用flask-login中的功能进行解释(也是今天的主要部分解释):
- 3.文件结构:
- 4.主文件.main.py:
- 5.前端文件:
- (1)index.html:
- (2).login.html:
1.一些主要的文字解释:
"""
#导入相关的模块和功能
from flask_login import current_user,login_user,logout_user,login_required,LoginManager,UserMixin#初始化
login_manager=LoginManager(app)以下函数必须写,这是用来回调用于从会话中存储的用户 ID 重新加载用户对象。它应该接受一个用户的 unicode ID 作为参数,并且返回相应的用户对象
既然需要ID,那么在设计的用户类中需要这句:id=Column(Integer,primary_key=True)——标记登录用户的ID
@login_manager.user_loader
def load_user(user_id):user=User.query.get(int(user_id))return user当在设计的登录模块login的时候, login_user必须写,这样才能知道登录的用户,保存当前的用户ID
#login_user表示让用户登录。保存到当前会话当中(session),这样才能加载和访问id
login_user(user,remember)#视图函数和@login_required配合使用:当用户处于未登录的状态时,但又要访问当前的页面
#那么根据视图函数自定义的函数将跳转到‘login’页面(这个函数根据自己定义),并且输出自
#定义的语句'Please restore login!'
login_manager.login_view='login'
#login-message:用户重定向到登录页面时闪出的消息
login_manager.login_message='Please restore login!'
"""
2.细节结合程序解释:
(1)首先看一下相关的界面设计:
以上是主要的界面,现在对使用的相关的知识点解释:
(2)首先对程序中的数据库部分代码截图解释:
(3)对使用flask-login中的功能进行解释(也是今天的主要部分解释):
演示一下上面的用户处于未登录状态时,访问: http://127.0.0.1:5000/showuser时会出现什么。
3.文件结构:
4.主文件.main.py:
from flask_wtf import FlaskForm
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import String,Integer,Column
from wtforms.validators import DataRequired,EqualTo,Length
from flask import Flask,render_template,url_for,redirect,request,jsonify,flash
from wtforms import StringField,SubmitField,TextAreaField,TelField,PasswordField,BooleanField
from flask_login import current_user,login_user,logout_user,login_required,LoginManager,UserMixinapp=Flask(__name__)
app.secret_key='view'class Config:SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@127.0.0.1:3306/main'SQLALCHEMY_TRACK_MODIFICATIONS = Falseapp.config.from_object(Config)
mysql=SQLAlchemy(app)
login_manager=LoginManager(app)class UserForm(FlaskForm):username=StringField(label='用户名: ',validators=[DataRequired()])password=PasswordField(label='密码: ',validators=[DataRequired()])remember=BooleanField(label='记住')submit=SubmitField(label='登录')class User(mysql.Model,UserMixin):__tablename__='users'id=Column(Integer,primary_key=True)username=Column(String(128),unique=True)password=Column(String(128),unique=True)def __repr__(self):return '<User: %s:%s>'%(self.username,self.password)@login_manager.user_loader
def load_user(user_id):user=User.query.get(int(user_id))return user@app.route('/login',methods=['POST','GET'])
def login():if current_user.is_authenticated:return redirect(url_for('show_user'))form=UserForm()if request.method=='POST':if form.validate_on_submit():username=form.username.datapassword=form.password.dataremember=form.remember.dataprint('username: {}'.format(username))print('password: {}'.format(password))print('remember: {}'.format(remember))#数据库查询user=User.query.filter_by(username=username).first()if user:if username==user.username and password==user.password:# if username==username:#login_user表示让用户登录。保存到当前会话当中(session),这样才能加载和访问idlogin_user(user,remember)flash('登录成功')return redirect(url_for('show_user'))else:flash('账户名或者密码错误')redirect(url_for('login'))return render_template('login.html',form=form)login_manager.login_view='login'
#login-message:用户重定向到登录页面时闪出的消息
login_manager.login_message='Please restore login!'@app.route('/showuser',methods=['POST','GET'])
@login_required
def show_user():#获得当前登录的用户username=current_user.usernamereturn render_template('index.html',username=username)@app.route('/logout',methods=['POST','GET'])
def logout():logout_user()return redirect(url_for('login'))if __name__ == '__main__':print('Pycharm')new_user=User(username='tom',password='123')mysql.drop_all()mysql.create_all()mysql.session.add(new_user)mysql.session.commit()mysql.session.close()app.run(debug=True)
5.前端文件:
(1)index.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div class="container" align="center"><h3>这是首页</h3>{% with messages=get_flashed_messages() %}{% if messages %}{% for message in messages %}<div><p style="color:red">{{message}}</p></div>{% endfor %}{% endif %}{% endwith %}{% if current_user.is_authenticated %}<li><a>当前登录用户名: {{username}}</a></li><li><a href="{{url_for('logout')}}">登出</a></li>{% else %}<li><a href="{{url_for('login')}}">登录</a></li>{% endif %}</div>
</body>
</html>
(2).login.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>a {text-decoration:none;}</style>
</head>
<body><div class="container" align="center"><h3>登录页面</h3>{% with messages=get_flashed_messages()%}{% if messages %}{% for message in messages %}<div><p style="color:red">{{message}}</p></div>{% endfor %}{% endif%}{% endwith %}<form action="" method="POST">
<!-- {{form.hidden_tag()}}-->{{form.csrf_token()}}<p>{{form.username.label}}<br>{{form.username}}</p><p>{{form.password.label}}<br>{{form.password}}</p><p>{{form.remember()}} {{form.remember.label}}</p><p>{{form.submit()}}</p></form></div>
</body>
</html>
Flask-Login一些使用解释(根据官网和个人查找资料的理解并解释)相关推荐
- 【Nordic】官网下载nRF52810相关资料
文章目录 1.Nordic官网开发资料 2.下载最新的nRF52810 SDK 3.下载nRF52810相关文档 4.下载Nordic的PACK包 5.编译验证 6.编译过程出现的错误 1.Nordi ...
- Advanced: Making Dynamic Decisions and the Bi-LSTM CRF(对官网发的代码的一些理解~,来自看不懂英文也没学过前置课程的小白两周的心血)
1.前置小知识 1)log_sum_exp 这个是升级版的softmax,防止出现上溢或下溢,详见关于LogSumExp - 知乎 # Compute log sum exp in a numeric ...
- ThinkPHP RBAC官网的例子详解
一直想学习RBAC,又看了官网的例子,又百度,没找到合适的教程.所以就只能自己研究了,就拿官网的例子来说吧 think_access表 作用是看某个组是否有权限访问某个模块下的方法或者访问某个模块,这 ...
- 013 到MySQL官网去看聚簇索引(clustered index)
学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册 也可以看看比较经典的书籍,如<高性能MySQL>等 1.MySQL官网的难词汇编(glossary)中的聚簇索引(clus ...
- Node 插件 爬取王者荣耀官网英雄信息,并生成数据库
文章结构 打开官网看接口地址 打开官网 游戏资料里的英雄资料,并打开后台 接下来是英雄技能 技能结构路径方便抓取 jQ的获取元素这里不细说 重头戏 抓包到到数据库 全部代码 看数据库 总结 打开官网看 ...
- ADI官网资料检索技巧
文章目录 技术文档检索 中英文文档转换 一些技术指南文章 官网其他部分使用 语言选择 器件选型 设计资源(仿真设计工具等) 教育(电子书.技术文章.视频资源等) 其他资源 ADI官网: 进入ADI官网 ...
- 如何下载西门子官网的受限文档和软件固件等资源?
如何下载西门子官网的受限文档和软件固件等资源? 西家官网以及论坛上资料种类很多,文档都很全,基本可以解决大部分工控行业的问题.但是大家可能也发现了一个问题,有些时候一些文档和软件等资源下载是受限制的, ...
- 小马识途营销顾问解读百度官网认证的价值和意义
近来,有不少小伙伴咨询百度官网认证,一起探讨了百度官网认证的价值,以及标准版和高级版的区别等.小马识途营销顾问总结官网认证算是一种锦上添花,而能够低成本引流拓客的SEO才是雪中送炭. 百度官网认证是什 ...
- 《flask日志logging一》flask官网介绍logging
官网地址:http://flask.pocoo.org/docs/dev/logging/ logging实例: @app.route('/login', methods=['POST']) def ...
最新文章
- 深度学习在超市商品识别中的解决方案分享
- linux内核编译练习
- 架构实战项目心得(三):JAVA和MAVEN的环境配置
- 更改sybase服务名
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 armv6)
- 幻读Java_脏读、幻读、不可重复读和丢失更新
- linux hash 算法,识别哈希算法类型hash-identifier
- 用c语言输出魔方阵答案,如何用C语言输出一个1—16 组成的4*4的魔方阵
- mysql中完成登陆注册_Flask+MySql实现用户登录注册
- C# 连接mysql 报错:SSL Connection error
- StanfordDB class自学笔记 (14) On-Line Analytical Processing
- 【Python的自学之路】(八):文字游戏分享
- 简单易学的机器学习算法——极限学习机(ELM)
- 对于一些360文件粉碎无法删除的解决方案
- 在使用html5的video标签播放视频时为何只有声音却没有图像
- 《管理学》之组织设计(进度一)
- 上线清单 —— 20 个 Laravel 应用性能优化项 1
- 2021年蚌埠学院的高考成绩查询,2021年蚌埠学院高考录取通知书查询 通知书什么时候可以收到...
- sofa协议服务器,sofa-rpc 服务端源码流程走读
- Eolink 联合生态伙伴举办2022国产软件开发者大会