全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

一个基于flask的web应用诞生 记录用户账户登录状态(6)

之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,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小时内与您取得联系。