一个简洁高效的Flask用户管理示例
Flask-Login 是 Flask 的用户管理扩展,提供 用户身份验证、会话管理、权限控制 等功能。
适用于:
• 用户登录、登出
• 记住用户(“记住我” 功能)
• 限制未登录用户访问某些页面
• 用户会话管理
1. 安装 Flask-Login
pip install flask-login flask-sqlalchemy
main.py
from flask import Flask, render_template, redirect, url_for, request, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_userapp = Flask(__name__)# 配置 Flask 和数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' # 使用 SQLite 数据库
app.config['SECRET_KEY'] = 'your_secret_key' # Flask-Login 需要 secret key
db = SQLAlchemy(app)
login_manager = LoginManager(app)# 定义用户模型
class User(UserMixin, db.Model): # UserMixin 提供 Flask-Login 必需的方法id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(100), unique=True, nullable=False)password = db.Column(db.String(200), nullable=False) # 真实应用需加密密码# 创建数据库表(仅需运行一次)
with app.app_context():db.create_all()# Flask-Login 加载用户的回调函数
@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id)) # 通过 ID 获取用户@app.route('/register', methods=['GET', 'POST'])
def register():if request.method == 'POST':username = request.form.get('username')password = request.form.get('password')if not username or not password:flash("用户名和密码不能为空!")return redirect(url_for('register'))# 检查用户是否已存在existing_user = User.query.filter_by(username=username).first()if existing_user:flash("用户名已存在,请选择其他用户名")return redirect(url_for('register'))# 创建新用户并保存到数据库new_user = User(username=username, password=password) # 这里应加密密码db.session.add(new_user)db.session.commit()flash("注册成功,请登录!")return redirect(url_for('login'))return render_template('register.html')@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form.get('username')password = request.form.get('password')# 查找用户user = User.query.filter_by(username=username).first()if user and user.password == password: # 这里应使用加密密码验证login_user(user) # 登录用户flash("登录成功!")return redirect(url_for('dashboard'))flash("用户名或密码错误")return redirect(url_for('login'))return render_template('login.html')@app.route('/dashboard')
@login_required # 保护此路由,未登录用户无法访问
def dashboard():return f"欢迎 {current_user.username}!这是您的仪表盘。 <a href='/logout'>登出</a>"@app.route('/logout')
@login_required
def logout():logout_user()flash("您已成功退出!")return redirect(url_for('login'))if __name__ == "__main__":app.run(debug=True)
templates/login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form method="post"><label>用户名:</label><input type="text" name="username" required><label>密码:</label><input type="password" name="password" required><button type="submit">登录</button>
</form>
</body>
</html>
templates/register.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form method="post"><label>用户名:</label><input type="text" name="username" required><label>密码:</label><input type="password" name="password" required><button type="submit">注册</button></form>
</body>
</html>
运行,然后访问:
• 注册:http://127.0.0.1:5000/register
• 登录:http://127.0.0.1:5000/login
• 仪表盘(必须登录):http://127.0.0.1:5000/dashboard
• 登出:http://127.0.0.1:5000/logout
相关文章:
一个简洁高效的Flask用户管理示例
Flask-Login 是 Flask 的用户管理扩展,提供 用户身份验证、会话管理、权限控制 等功能。 适用于: • 用户登录、登出 • 记住用户(“记住我” 功能) • 限制未登录用户访问某些页面 • 用户会话管理 1. 安装 Flask-Login pi…...
HTML之JavaScript Form表单事件
HTML之JavaScript Form表单事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…...
[文末数据集]ML.NET库学习010:URL是否具有恶意性分类
文章目录 ML.NET库学习010:URL是否具有恶意性分类项目主要目的和原理项目概述主要功能和步骤总结数据集地址ML.NET库学习010:URL是否具有恶意性分类 项目主要目的和原理 项目主要目的: 本项目的目的是通过分析URL的特征,构建一个机器学习模型来判断给定的URL是否具有恶意…...
百度地图接入DeepSeek技术解析:AI如何重塑地图搜索体验?
百度地图接入DeepSeek技术解析:AI如何重塑地图搜索体验? 百度地图接入DeepSeek技术解析:AI如何重塑地图搜索体验?引言一、技术背景与核心能力1.1 DeepSeek的技术优势1.2 百度地图API的技术底座 二、技术实现路径2.1 系统架构设计2…...
C语言——深入理解指针(2)(数组与指针)
文章目录 数组名的理解使用指针访问数组一维数组传参的本质冒泡排序二级指针指针数组指针数组模拟二维数组 数组名的理解 之前我们在使用指针访问数组内容时,有这样的代码: int arr[10]{1,2,3,4,5,6,7,8,9,10}; int* p&arr[0];这里我们使用&ar…...
Open-WebUI官方部署文档
Github地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 打开 WebUI 👋 如果你是零基础的小白,不知道什么是DeepSeek的话?不知道如何本地化部署,我强烈建议先看…...
爬虫破解网页禁止F12
右击页面显示如下 先点击f12再输入网址,回车后没有加载任何数据 目前的一种解决方法: 先 AltD ,再 CtrlShifti...
vuex 简单使用
vuex 简单使用 示例:管理一个对象状态 假设我们要管理一个用户对象 user,包含 name 和 age 两个属性。 1. 定义 Vuex Store 在 store/index.js 中定义状态、mutations、actions 和 getters: import { createStore } from vuex;const store…...
机器学习_16 朴素贝叶斯知识点总结
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的概率分类算法,广泛应用于文本分类、垃圾邮件检测和情感分析等领域。它通过计算后验概率来进行分类,核心假设是特征之间相互独立。今天,我们就来深入探讨朴素贝叶斯的原理…...
Xshell连接虚拟机ubuntu,报错(port 22): Connection failed.
Connecting to 192.168.37.131:22... Could not connect to 192.168.37.131 (port 22): Connection failed. 虚拟机ubuntu 可以ping通,但就是连接不上。 先后排查了, 1. 网络适配器是否被禁用 2.设置虚拟机网络适配器的网络连接模式为桥接模式…...
浏览器报错:无法访问此网站 无法找到xxx.xxx.net的DNS地址。正在诊断该问题。尝试运行Windows网络诊断。DNS_PROBE_STARTED
🤟致敬读者 🟩感谢阅读🟦希望我的文章能帮到您🟪如有兴趣可点关注了解更多内容 📘博主信息 点击标题👆有惊喜 📃文章前言 🔷文章均为学习和工作中整理的笔记,分享记录…...
2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略&…...
React中如何处理高阶组件中的错误
在 React 高阶组件中处理错误是确保应用程序健壮性和稳定性的重要环节。以下是一些处理高阶组件中错误的常见方法: 1. 捕获渲染时的错误 在高阶组件中,渲染过程可能会因为各种原因(如 props 数据格式错误、组件内部逻辑异常等)抛…...
CentOS/RHEL如何更换国内Yum源
在国内使用CentOS或RHEL系统时,默认的Yum源是国外的,这可能导致软件包的下载速度慢,甚至出现连接超时的问题。为了解决这个问题,我们可以将Yum源切换到国内的镜像源,从而大大提高软件包的下载速度和稳定性。 本文将详…...
linux 替换jar包中的文件
在 Linux 系统中替换 JAR 文件中的文件,一般可以使用jar命令来完成,以下是具体步骤8: 查找目标文件在 JAR 包中的路径:使用jar tvf命令可以列出 JAR 包中的所有文件,再通过grep命令来过滤出要替换的目标文件。例如&am…...
如何系统成为高级Qt工程师?
要系统性地成为高级Qt工程师,需要从基础到进阶逐步构建知识体系,并结合实战经验、源码分析和架构设计能力的提升。以下是分阶段的系统性学习路径和建议: 一、夯实基础阶段 C++深度掌握 精通C++11/14/17特性(智能指针、lambda、移动语义等)理解面向对象设计、设计模式(如观…...
A9. Jenkins Pipeline自动化构建,飞书通知
怎么收集服务部署信息?【前置】首先Python如何操作JSON数据如何记录部署信息,什么时机统计?如何下发某一服务统计信息 ?那么怎么创建飞书通知机器人呢?编写飞书通知脚本总结下面我们接着上一篇文章《A8. Jenkins Pipeline自动化部署过程,多模块远程服务协调实战》继续往下…...
firefox升级后如何恢复收藏夹和密码的问题
手贱,无聊,看到Firefox提示说再不升级就不能使用了,结果就信了; 升级完之后,傻眼了,收藏夹无法导入,密码全没了 新版的Firefox采用snap方式安装,所以安装路径是在snap下面的&#…...
维护ceph集群
1. set: 设置标志位 # ceph osd set <flag_name> # ceph osd set noout # ceph osd set nodown # ceph osd set norecover 2. unset: 清除标志位 # ceph osd unset <flag_name> # ceph osd unset noout # ceph osd unset nodown # ceph osd unset norecover 3. 标志…...
亲测!我是如何用 Anything LLM 等搭建 AI 智能知识库的
以下是本地部署Anything LLMOllamaDeepSeek R1打造AI智能知识库的教程: 安装Ollama 下载Ollama:浏览器进入ollama.com主页,点击页面右上角或中间下端黑底的“Download”。选择对应的系统图标,如Windows用户点击“Download for W…...
汽车零部件开发应该具备哪些编程思维?
目录 1、功能安全思维 2、实时性与确定性思维 3、可靠性和冗余思维 4、硬件软件协同思维 5、CAN总线通信思维 6、故障诊断和自诊断思维 7、功耗优化思维 8、软件更新和版本管理思维 9、用户体验与安全性思维 汽车零部件开发中,嵌入式软件在车辆系统中的作用…...
利用 OpenCV 进行棋盘检测与透视变换
利用 OpenCV 进行棋盘检测与透视变换 1. 引言 在计算机视觉领域,棋盘检测与透视变换是一个常见的任务,广泛应用于 摄像机标定、文档扫描、增强现实(AR) 等场景。本篇文章将详细介绍如何使用 OpenCV 进行 棋盘检测,并…...
DeepMind发布Matryoshka(套娃)量化:利用嵌套表示实现多精度LLM的低比特深度学习
本文将介绍 Google DeepMind 提出的 Matryoshka 量化技术,该技术通过从单个大型语言模型 (LLM) 实现多精度模型部署,从而革新深度学习。我们将深入研究这项创新技术如何提高 LLM 的效率和准确性。 随着深度学习模型在规模和复杂度上持续增长,…...
DeepSeek01-本地部署大模型
一、ollama简介: 什么是 Ollama? Ollama 是一个用于本地部署和管理大模型的工具。它提供了一个简单的命令行界面, 使得用户可以轻松地下载、运行和管理各种大模型。Ollama 支持多种模型格式, 并且可以与现有的深度学习框架&#x…...
Java-数据结构-(HashMap HashSet)
一、Tree和Hash的区别 在上一篇文章中,我们讲到了"TreeMap"和"TreeSet",但当我们刷题的时候却会发现,实际应用Map和Set时,却常常都只会用"HashMap"和"HashSet",这是为什么呢…...
举个栗子:浅显易懂的理解Transformer 模型
用一个简单的比喻来解释 Transformer 模型,让你轻松理解它的工作原理。 Transformer 的比喻:一个高效的翻译团队 想象一下,Transformer 模型就像一个高效的翻译团队,它的任务是把一段英文翻译成中文。这个团队由两部分组成&#…...
el-table 结合 slot 具名插槽遍历封装列表模板
基础效果 要实现以上效果,可对 el-table 进行封装,将列配置视为数组,循环 el-table-column 标签模板组件 <div class"tableSlot"><el-table :data"dataList" border><el-table-columnv-for"(item, …...
游戏引擎学习第108天
仓库:https://gitee.com/mrxiao_com/2d_game_2 看一下我们现在的进展 今天的工作重点是处理游戏中的Z轴问题,特别是如何在不同的层级之间进行移动,并确保Z轴的处理方式与真实世界中的透视效果一致。当前,游戏中的Z轴运动存在问题࿰…...
遵循规则:利用大语言模型进行视频异常检测的推理
文章目录 速览摘要01 引言02 相关工作视频异常检测大语言模型 03 归纳3.1 视觉感知3.2 规则生成Normal and Anomaly (正常与异常)Abstract and Concrete (抽象与具体)Human and Environment (人类与环境) 3…...
网页制作01-html,css,javascript初认识のhtml的基本标记
一、 Html简介 英文全称是 hyper text markup language,超文本标记语言,是全球广域网上描述网页内容和外观的标准. Html作为一款标记语言,本身不能显示在浏览器中.标记语言经过浏览器的解释和编译,才能正确地反映html标记语言的内容. 1.html 的基本标记 1)头部标…...
