之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,title一直都写得博客,那么最终目的也是写出一个轻博客来,但是,在发表文章之前是不是要先记录一下登录状态呢?

用户登录
登录状态的记录方式有很多种,首先想到的应该就是使用flask自带的session,但flask还提供了一种更方便的扩展,即flask-login包,使用方式还和之前一样,首先需要安装:
pip3.6 install flask-login
然后在default.py中进行初始化:
from flask.ext.login import LoginManager ...... login_manager=LoginManager() login_manager.session_protection="strong" #可设置为None,basic,strong已提供不同的安全等级 login_manager.login_view="login" #设置登录页
然后按照需求对User模型进行修改,因为Flask-Login要求User模型必须实现四个方法,分别为:
is_authenticated() 判断是否登录,登录返回True,否则返回False
is_active() 是否允许登录,即用户是否已被禁用,如禁用返回False
is_anonymous() False为普通用户
get_id() 返回用户唯一标识符,使用Unicode编码
这四个方法在User模型中直接实现即可,但是还有一种更简单的方式,即继承Flask-Login提供的UserMixin类,它里边包含了这些方法的默认实现,修改后的User模型为:
from flask.ext.login import UserMixin class User(UserMixin,db.Model): __tablename__="users" id=db.Column(db.Integer,primary_key=True) ......
flask-login还要求程序实现一个回调函数,已使用指定的标识符家在用户:
@login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))
之后,就可以方便的使用flask-login框架,继续修改首页模板的导航部分,以便显示用户名及相应信息:
{%extends "bootstrap/base.html "%}
{% block title%}牛博客 {% endblock %}<!--覆盖title标签-->
{% block navbar %}
<nav class="navbar navbar-inverse"><!-- 导航部分 -->
<div class="navbar-header">
<a class="navbar-brand" href="#" rel="external nofollow" rel="external nofollow" >
牛博客
</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/" rel="external nofollow" >首页</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_authenticated %}
<li><p class="navbar-text"><a href="#" rel="external nofollow" rel="external nofollow" class="navbar-link">{{current_user.username}}</a> 您好</p></li>
<li><a href="{{url_for('logout')}}" rel="external nofollow" >登出</a></li>
{% else %}
<li><a href="{{url_for('login')}}" rel="external nofollow" >登录</a></li>
{% endif %}
</ul>
</div><!-- /.navbar-collapse -->
</nav>
{% endblock %}
{% block content %} <!--具体内容-->
<div class="container">
</div>
{% endblock %}
这里新出现url_for方法,它的主要功能是使用程序中的信息生成URL,比如传入视图的方法名,生成对应的url,还可以通过方法的动态参数生成url的参数,如url_for('index',age=5)结果为/?age=5
主要内容为判断是否登录,若登录显示 {{用户名}}你好,并提供登出功能,否则显示登录链接。
修改登录表单:
class LoginForm(Form):
username=StringField("请输入用户名",validators=[DataRequired()])
password=PasswordField("请输入密码")
remember_me=BooleanField("记住我")
submit=SubmitField("登录")
增加记住我项目, BooleanField默认为多选按钮
修改登录视图方法:
@app.route("/login",methods=["GET","POST"])
def login():
form=LoginForm()
if form.validate_on_submit():
username = form.username.data
password = form.password.data
user = User.query.filter_by(username=username, password=password).first()
if user is not None:
login_user(user,form.remember_me.data)
return redirect(url_for("index"))
else:
flash("您输入的用户名或密码错误")
return render_template("/login.html",form=form) # 返回的仍为登录页
return render_template("/login.html",form=form)
其中login_user为flask_login插件提供,用于设置用户登录,其中第二个参数即为记住我选项,若输入True,则提供cookie存储状态,否则关闭浏览器状态即取消
新增登出方法:
@app.route("/logout",methods=["GET","POST"])
@login_required
def logout():
logout_user()
return redirect(url_for("index"))
此方法很简单,直接使用flask-login提供的登出方法即可,注意@login_required装饰器表示,只有登录用户才可访问此视图方法。
运行测试一下,输入首页地址:
点击右上角的登录键:
输入用户名zhangji 密码123 并选择记住我,点击确定:
注意红线部分,显示正常,此时点击登出:
注意红线部分,回到初始状态。
章节结语
接下来本来应该是发帖及关注功能,但很明显,现在代码都在default.py中,对于代码结构越来越力不从心,所以本章的篇幅比较小,下一章将重点对已有代码进行重构,并对功能进行分组,然后在继续写接下来的功能。谢谢观看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# flask
# python记录用户登录状态
# python用户登录
# Flask框架的学习指南之用户登录管理
# Python的Flask框架中实现简单的登录功能的教程
# 使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
# bootstrap flask登录页面编写实例
# Python的Flask框架应用程序实现使用QQ账号登录的方法
# Python的Flask框架中实现登录用户的个人资料和头像的教程
# Vue+Flask实现简单的登录验证跳转的示例代码
# flask使用session保存登录状态及拦截未登录请求代码
# python使用Flask操作mysql实现登录功能
# Flask框架通过Flask_login实现用户登录功能示例
# 首页
# 记住我
# 博客
# 请输入
# 用户登录
# 判断是否
# 还可以
# 都在
# 已有
# 已被
# 第二个
# 很简单
# 分别为
# 并对
# 主要内容
# 要先
# 自带
# 较小
# 发表文章
# 写得
相关文章:
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何快速生成凡客建站的专业级图册?
如何在Golang中指定模块版本_使用go.mod控制版本号
如何在万网ECS上快速搭建专属网站?
盐城做公司网站,江苏电子版退休证办理流程?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
定制建站价位费用解析与套餐推荐全攻略
网站制作软件有哪些,制图软件有哪些?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何快速生成高效建站系统源代码?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站之星如何配置系统实现高效建站?
建站之星代理平台如何选择最佳方案?
如何规划企业建站流程的关键步骤?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
*服务器网站为何频现安全漏洞?
网站制作价目表怎么做,珍爱网婚介费用多少?
高防服务器租用指南:配置选择与快速部署攻略
如何在Windows环境下新建FTP站点并设置权限?
如何构建满足综合性能需求的优质建站方案?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
教程网站设计制作软件,怎么创建自己的一个网站?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Python路径拼接规范_跨平台处理说明【指导】
建站之星多图banner生成与模板自定义指南
,sp开头的版面叫什么?
如何通过WDCP绑定主域名及创建子域名站点?
魔方云NAT建站如何实现端口转发?
如何用PHP快速搭建高效网站?分步指南
网站制作大概多少钱一个,做一个平台网站大概多少钱?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
Python多线程使用规范_线程安全解析【教程】
建站168自助建站系统:快速模板定制与SEO优化指南
建站之星ASP如何实现CMS高效搭建与安全管理?
简单实现Android验证码
学校免费自助建站系统:智能生成+拖拽设计+多端适配
电商网站制作公司有哪些,1688网是什么意思?
南宁网站建设制作定制,南宁网站建设可以定制吗?
Java解压缩zip - 解压缩多个文件或文件夹实例
小型网站建站如何选择虚拟主机?
如何快速登录WAP自助建站平台?
如何选择域名并搭建高效网站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
高性价比服务器租赁——企业级配置与24小时运维服务
*请认真填写需求信息,我们会在24小时内与您取得联系。