使用 Flask 实现简单的登录注册功能
目录
1. 引言
2. 环境准备
3. 数据库设置
4. Flask 应用基本配置
5. 实现用户注册
6. 实现用户登录
7. 路由配置
8. 创建前端页面
9. 结论
1. 引言
在这篇文章中,我们将使用 Flask 框架创建一个简单的登录和注册系统。Flask 是一个轻量级的 Python Web 框架,适合快速开发 Web 应用。
2. 环境准备
-
安装 Flask:可以通过 pip 安装 Flask 和相关依赖:
pip install Flask以下是具体配置
-
from flask import Flask, render_template, request, render_template_string, redirect, url_for from flask_mysqldb import MySQL from werkzeug.security import generate_password_hash, check_password_hash from config import Config # 导入配置文件 -

-
创建项目结构:
flask_demologin/ ├── app.py ├── config.py ├── templates/ │ ├── login.html │ ├── res.html │ └── index.html └── static/└── css/└── img/
3. 数据库设置
- 使用 MySQL:
- 创建数据库及用户表。
CREATE DATABASE demologin; USE demologin;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(100) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL );
4. Flask 应用基本配置
- config.py 文件配置数据库连接:
class Config: MYSQL_HOST = 'localhost' MYSQL_USER = 'root' # 替换为你的 MySQL 用户名 MYSQL_PASSWORD = 'root' # 替换为你的 MySQL 密码 MYSQL_DB = 'demologin' # 替换为你的 数据库名称
5. 实现用户注册
- 在 app.py 中创建注册路由:
@app.route('/register', methods=['POST']) def register():name = request.form.get('username')pwd = request.form.get('password')if not name or not pwd:return render_template_string("用户名和密码不能为空,<a href='/'>返回登录</a>"), 400cur = mysql.connection.cursor()cur.execute("SELECT * FROM users WHERE username = %s", (name,))user = cur.fetchone()if user:return render_template_string("用户名已存在,<a href='/'>返回登录</a>"), 400hashed_pwd = generate_password_hash(pwd)cur.execute("INSERT INTO users (username, password) VALUES (%s, %s)", (name, hashed_pwd))mysql.connection.commit()cur.close()return render_template_string("注册成功,<a href='/'>返回登录</a>"), 201
6. 实现用户登录
- 在 app.py 中创建登录路由:
@app.route('/login', methods=['POST']) def login():name = request.form.get('username')pwd = request.form.get('password')if not name or not pwd:return render_template_string("用户名和密码不能为空,<a href='/'>返回注册</a>"), 400cur = mysql.connection.cursor()cur.execute("SELECT * FROM users WHERE username = %s", (name,))user = cur.fetchone()if user and check_password_hash(user[2], pwd): # user[2] 是密码字段return redirect(url_for('home')) # 登录成功,重定向到主页else:return "用户名或密码错误", 401
7. 路由配置
- 设置首页和重定向:
@app.route('/') def home():return render_template('index.html') # 渲染主页模板- 设置登录页面和注册页面和重定向:
@app.route('/')
def Index_login(): # put application's code herereturn render_template('login.html')@app.route('/res')
def Index_res(): # put application's code herereturn render_template('res.html')
8. 创建前端页面
- login.html 和 res.html 的简单示例:
<!-- login.html --> <div class="cont-parent"> <div class="cont"><div class="form sign-in"><h2>Welcome back, Doctor</h2><form action="/login" method="post"><label><span>用户名</span><input type="text" name="username" placeholder="Username" required/></label><label><span>密码</span><input type="password" name="password" placeholder="Password" required/></label><button type="submit" class="submit">登录</button></form><p class="forgot-pass">忘记密码?</p><button type="button" class="fb-btn">链接 <span>facebook</span></button></div><div class="sub-cont"><div class="img"><div class="img__text m--up"><h2>刚来?</h2><p>那就<a href="/res">注册</a>一个吧!</p></div></div></div></div></div><!-- res.html --> <div class="cont-parent"> <div class="cont"><div class="form sign-in"><h2>Time to feel like home,</h2><form action="/register" method="post"><label><span>用户名</span><input type="text" name="username" placeholder="Username" required/></label><label><span>密码</span><input type="password" name="password" placeholder="Password" required/></label><button type="submit" class="submit">注册</button></form><button type="button" class="fb-btn">Join with <span>facebook</span></button></div><div class="sub-cont"><div class="img"><div class="img__text m--up"><h2>已经有账号了?</h2><p>那就去<a href="/">登录</a>吧!</p></div></div></div></div></div>
9. 结论
通过本文,我们实现了一个基本的登录和注册功能。
以下是实现的效果图(前端靠大家自由发挥,提供的html代码进作为参考)



相关文章:
使用 Flask 实现简单的登录注册功能
目录 1. 引言 2. 环境准备 3. 数据库设置 4. Flask 应用基本配置 5. 实现用户注册 6. 实现用户登录 7. 路由配置 8. 创建前端页面 9. 结论 1. 引言 在这篇文章中,我们将使用 Flask 框架创建一个简单的登录和注册系统。Flask 是一个轻量级的 Python Web 框架…...
计算机毕业设计Python+大模型微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 《Python大模型微博情感分析…...
CTF--Misc题型小结
(萌新笔记,多多关照,不足之处请及时提出。) 不定时更新~ 目录 密码学相关 文件类型判断 file命令 文件头类型 strings读取 隐写术 尺寸修改 文件头等缺失 EXIF隐写 thumbnail 隐写 文件分离&提取 binwalk foremo…...
深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制
1、RNN/LSTM/GRU可参考: https://zhuanlan.zhihu.com/p/636756912 (1)对于这里面RNN的表示中,使用了输入x和h的拼接描述,其他公式中也是如此 (2)各符号图含义如下 2、关于RNN细节,…...
通过call指令来学习指令摘要表的细节
E8 cw cw 表示E8后面跟随2 字节 (什么数不知道) rel16 指在与指令同一代码段内的相对地址偏移 D ,指向Instruction Operand Encoding 表中的D列, 他告诉我们 操作数1 是一个0FFSET N.S. 在64位模式下,某些指令需要使用“地址覆盖前缀”(address over…...
10分钟使用Strapi(无头CMS)生成基于Node.js的API接口,告别繁琐开发,保姆级教程,持续更新中。
一、什么是Strapi? Strapi 是一个开源的无头(headless) CMS,开发者可以自由选择他们喜欢的开发工具和框架,内容编辑人员使用自有的应用程序来管理和分发他们的内容。得益于插件系统,Strapi 是一个灵活的 C…...
创建插件 DLL 项目
Step 1: 创建插件 DLL 项目 在 Visual Studio 中创建一个新的 DLL 项目,并添加以下文件和代码。 头文件:CShapeBase.h cpp 复制代码 #pragma once #include <afxwin.h> // MFC 必需头文件 #include <string> #include <vector> #i…...
OpenCV双目相机外参标定C++
基于OpenCV库实现双目测量系统外参标定过程。通过分析双目测量系统左右相机拍摄的棋盘格标定板图像,包括角点检测、立体标定、立体校正和畸变校正的步骤,获取左右相机的相对位置关系和姿态。 a.检测每张图像中的棋盘格角点,并进行亚像素级精…...
【GESP】C++一级练习BCQM3055,4位数间隔输出
一级知识点取余、整除运算和格式化输出知识点应用。其实也可以用string去处理,那就属于GESP三级的知识点范畴了,孩子暂未涉及。 题目题解详见:https://www.coderli.com/gesp-1-bcqm3055/ https://www.coderli.com/gesp-1-bcqm3055/https://w…...
纯血鸿蒙的最难时刻才开始
关注卢松松,会经常给你分享一些我的经验和观点。 纯血鸿蒙(HarmonyOS NEXT)也正式发布了,绝对是一个历史性时刻,但最难的鸿蒙第二个阶段,也就是生态圈的建设,才刚刚开始。 目前,我劝你现在不要升级到鸿蒙…...
记一个mysql的坑
数据库表user, 存在一个name字段,字段为varchar类型 现在user表有这么两条记录: idnameageclass1NULL18一班2lisi20二班 假如我根据下面这一条件去更新,更新成功数据行显示为0 update user set age 19 where age 18 and class “一班”…...
Java中的设计模式:单例模式详解
摘要 单例模式(Singleton Pattern)是Java中最常用的设计模式之一,属于创建型模式。它的主要目的是确保一个类在系统中只有一个实例,并提供一个全局访问点来访问该实例。 1. 单例模式的定义 单例模式确保一个类只有一个实例&…...
NanoTrack原理与转tensorrt推理
文章目录 前言一、NanoTrack 工作原理二、运行demo与转换tensorrt模型2.1 运行pt模型demo2.2 转onnx模型2.3 转tensorrt模型2.4 运行trt模型推理 三、推理速度对比总结 前言 NanoTrack 是一种轻量级且高效的目标跟踪算法,基于Siamese网络架构,旨在在资源…...
YOLO11改进 | 卷积模块 | 卷积模块替换为选择性内核SKConv【附完整代码一键运行】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的卷积替…...
CentOS进入单用户模式进行密码重置
一、单用户模式介绍 单用户模式是一种特殊的启动模式,主要用于系统维护和故障排除。在单用户模式下,系统以最小化的状态启动,只有最基本的系统服务会被加载,通常只有root用户可以登录。这种模式提供了对系统的完全控制࿰…...
bitpoke- mysql-operator cluster
sidecar版本只支持到8.0.35,35可以支持到mysql8.0.35 . 默认镜像是5.7的。需要自己打sidecar的镜像: # Docker image for sidecar containers # https://github.com/bitpoke/mysql-operator/tree/master/images/mysql-operator-sidecar-8.0 # 参考5…...
第5课 基本数据类型
一、数据类型的诞生 在Python的世界里,万物皆对象,每个对象都有自己的若干属性,每一个属性都能描述对象的某一个方面。就像我们每个人,都有自己的身高、年龄、姓名、性别等很多方面的信息,这里的身高、年龄、姓名、性…...
OceanBase 首席科学家阳振坤:大模型时代的数据库思考
2024年 OceanBase 年度大会 即将于10月23日,在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享! 近期,2024年金融业数据库技术大会在北京圆满举行,聚焦“大模型时代下数据库的创新发展”议题,汇聚了国内外众多…...
国内知名的几个镜像源
在国内,有许多常用的Python库镜像源可以帮助加速库的下载。以下是几个知名的镜像源: 1. 清华大学TUNA协会 网址: https://pypi.tuna.tsinghua.edu.cn/simple命令示例:pip install numpy --index-url https://pypi.tuna.tsinghua.edu.cn/simple2. 阿里云…...
海外著名新闻门户媒体软文发稿之华盛顿独立报-大舍传媒
在当今全球化的时代,信息传播的速度和范围达到了前所未有的程度。对于企业和个人而言,如何在国际舞台上有效地展示自己、传递信息,成为了一项至关重要的任务。而海外媒体发稿,特别是通过像华盛顿独立报这样的知名新闻门户…...
IIC驱动进阶:实现非连续寄存器批量配置的模块化设计
1. IIC总线驱动开发的痛点与挑战 第一次接触摄像头模块配置时,我被密密麻麻的寄存器列表吓到了。OV5640摄像头需要配置上百个寄存器,地址从0x3100到0x5FFF不等,每个寄存器都有特定功能。更麻烦的是,这些寄存器地址完全不连续&…...
I2CLCD驱动库:HD44780字符屏的I²C轻量级嵌入式驱动
1. I2CLCD库概述:面向嵌入式系统的字符型LCD IC适配驱动I2CLCD是一个轻量级、高可靠性的开源驱动库,专为将标准HD44780兼容的字符型LCD(如1602、2004)通过IC总线接入嵌入式系统而设计。其核心价值在于以最小硬件资源开销实现LCD控…...
从医院呼叫器到智能家居:用Multisim 14.2复刻经典八路呼叫器(附完整仿真文件)
从医院呼叫器到智能家居:用Multisim 14.2复刻经典八路呼叫器(附完整仿真文件) 在电子技术发展的历史长河中,经典电路设计往往蕴含着跨越时代的智慧。八路呼叫器作为数字电子技术的经典教学案例,其核心模块——编码、锁…...
ECharts 进阶:用pictorialBar打造沉浸式3D数据看板
1. 从立体柱状图到3D数据看板的进化之路 第一次看到pictorialBar这个配置项时,我正对着产品经理要求的"科技感大屏"发愁。传统柱状图在会议室大屏上就像黑白电视一样乏味,直到发现ECharts这个隐藏技能——用几行代码就能把平面图表变成带光影效…...
Abaqus纤维复合材料三点弯曲力学仿真全解析
Abaqus纤维复合材料三点弯曲力学仿真(vumat子程序inp文件obd文件视频文件快速建模软件)在材料力学的研究领域,纤维复合材料凭借其优异的性能被广泛应用。而通过Abaqus进行三点弯曲力学仿真,能有效探究其力学特性。今天咱就来唠唠这…...
三步突破语音克隆音质瓶颈:VoxCPM ZipEnhancer全解析
三步突破语音克隆音质瓶颈:VoxCPM ZipEnhancer全解析 【免费下载链接】VoxCPM VoxCPM: Tokenizer-Free TTS for Context-Aware Speech Generation and True-to-Life Voice Cloning 项目地址: https://gitcode.com/GitHub_Trending/vo/VoxCPM 在语音合成领域&…...
CloudCompare进阶指南:PoissonRecon点云重建实战技巧
1. 点云重建入门:为什么选择PoissonRecon? 刚接触三维建模的朋友可能都有这样的困惑:扫描仪获取的原始点云数据看起来像一团散乱的星空,怎么才能变成光滑的曲面模型?这就是点云表面重建要解决的问题。在CloudCompare的…...
Unity3D物体缩放避坑指南:为什么你的Transform.localScale总是不生效?
Unity3D物体缩放避坑指南:为什么你的Transform.localScale总是不生效? 在Unity3D开发中,Transform.localScale属性看似简单,却隐藏着许多让开发者头疼的陷阱。不少开发者都遇到过这样的场景:明明代码里设置了localScal…...
Ostrakon-VL-8B实战:基于Transformer架构的视觉问答效果展示
Ostrakon-VL-8B实战:基于Transformer架构的视觉问答效果展示 最近在测试各种多模态模型时,我遇到了一个挺有意思的家伙——Ostrakon-VL-8B。这名字听起来有点拗口,但简单来说,它是一个拥有80亿参数的视觉语言模型,专门…...
从TJA1050到SIT1050T:手把手教你搞定CAN收发器外围电路与PCB布局避坑
从TJA1050到SIT1050T:手把手教你搞定CAN收发器外围电路与PCB布局避坑 在汽车电子和工业控制领域,CAN总线因其出色的抗干扰能力和可靠性成为首选通信协议。但许多工程师在设计CAN收发器外围电路时,常因忽视数据手册中的关键细节而导致通信不稳…...
