如何在Flask中实现用户认证

ops/2024/10/18 9:22:20/

在Flask中实现用户认证通常涉及几个关键步骤:使用第三方库(如Flask-Login或Flask-Security)、用户数据管理、登录表单处理、会话管理以及保护需要认证的路由。以下是使用Flask-Login库实现用户认证的基本步骤:

1. 安装Flask-Login

首先,确保安装了Flask和Flask-Login。可以使用pip来安装:

pip install Flask Flask-Login

2. 设置Flask应用并配置Flask-Login

在你的Flask应用中,你需要初始化Flask-Login并设置用户加载回调函数。

from flask import Flask  
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user  app = Flask(__name__)  
app.secret_key = 'your_secret_key'  # 用于会话管理的密钥  login_manager = LoginManager()  
login_manager.init_app(app)  
login_manager.login_view = 'login'  # 未登录时重定向的视图名称  # 用户加载回调函数  
@login_manager.user_loader  
def load_user(user_id):  # 根据用户ID从数据库加载用户,这里只是示例  from yourapp.models import User  # 假设你有一个User模型  return User.query.get(int(user_id))

3. 定义用户模型

你需要有一个用户模型,通常是一个类,继承自UserMixin并包含一些基本属性(如用户名、密码等)。

from werkzeug.security import generate_password_hash, check_password_hash  
from flask_login import UserMixin  class User(UserMixin, db.Model):  # 假设你使用SQLAlchemy作为ORM  id = db.Column(db.Integer, primary_key=True)  username = db.Column(db.String(64), unique=True, nullable=False)  password_hash = db.Column(db.String(128), nullable=False)  # 验证密码  def check_password(self, password):  return check_password_hash(self.password_hash, password)  # 设置密码  def set_password(self, password):  self.password_hash = generate_password_hash(password)

4. 创建登录表单和视图

你需要一个表单用于用户输入用户名和密码,以及处理登录的视图函数。

from flask import render_template, request, redirect, url_for, flash  @app.route('/login', methods=['GET', 'POST'])  
def login():  if request.method == 'POST':  username = request.form['username']  password = request.form['password']  user = User.query.filter_by(username=username).first()  if user and user.check_password(password):  login_user(user)  return redirect(url_for('dashboard'))  flash('Invalid username or password')  return render_template('login.html')

5. 保护需要认证的路由

使用@login_required装饰器来保护需要用户认证的路由。

@app.route('/dashboard')  
@login_required  
def dashboard():  return 'Welcome to the Dashboard, ' + current_user.username

6. 注销用户

提供一个注销用户的视图函数。

@app.route('/logout')  
@login_required  
def logout():  logout_user()  return redirect(url_for('login'))

7. 运行你的应用

确保你的数据库已正确设置并包含一些用户数据,然后运行你的Flask应用。

这是一个基本的用户认证流程,你可以根据需求添加更多功能,如密码重置、用户注册、邮箱验证等。


http://www.ppmy.cn/ops/110200.html

相关文章

UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务 UDS 诊断 - ECUReset(ECU重置)(0x11)服务 UDS 诊断 - SecurityA…

性能测试-jmeter连接数据库(十七)...

百度服务器域名:www.baidu.com 百度的IP:110.242.68.3(使用ping www.baidu.com) jdbc:mysql://211.103.136.244:7061/test_db: mysql是数据库类型211.103.136.244是服务器IP7061是服务器端口号test_db是服务器的数据库 一、为…

Linux常见运维命令

lscpu socket lsblk 硬盘 ip a free -mh 内存 lspci -nn | grep -i nvidia 修改ipmi地址 ipmitool lan print ipmitool -I open lan set 1 ipsrc static 设置本地BMC地址为静态,才能设置IP ipmitool -I open lan set 1 ipaddr 192.168.0.51 设置本地BMC的IP地址 ipm…

Axure设计之全屏与退出全屏交互实现

在Axure RP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在Axure RP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。 ​ Axure原型设计web端交互元件库:https://…

登录页面 —— 前端代码解析与分享

一、页面效果展示 这个登录页面以简洁大气的风格呈现,背景采用了线性渐变,从深灰色过渡到浅紫色,营造出一种科技感十足的氛围。页面中央是一个白色的登录框,包含了用户名、密码输入框,以及一个带有动态验证码的输入框…

SprinBoot+Vue爱老助老服务平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

Spring Boot的application.yml属性大全

一、Server 配置属性表格: 序号配置属性描述1server.port配置应用程序的监听端口(默认8080)2server.address配置绑定的网络地址(绑定特定IP)3server.servlet.context-path配置应用程序的上下文路径4server.servlet.se…

输出CAD图中第一个图元类型——c#实现

复制改图元到一个新dwg中,启动代码可实现 如下图设置: using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq…