当前位置: 首页 > news >正文

Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)

目录

  • 前言
  • Demo

前言

对于python用户的登录,以下只是提供一个Demo用于学习

更多的python知识点可从我的专栏中进行学习

  1. python专栏
  2. 详细分析Flask中的蓝图Blueprint(附Demo)
  3. 详细分析Flask部署云服务器(图文介绍)
  4. 构建Flask前后端不分离项目(附Python Demo)

Demo

项目结构:

/project-directory/templateslogin.htmlapp.py

前端登录页面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;}.container {width: 300px;margin: 100px auto;padding: 20px;background-color: white;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}h2 {text-align: center;}.form-group {margin-bottom: 15px;}.form-group label {display: block;}.form-group input {width: 100%;padding: 8px;box-sizing: border-box;}.form-group button {width: 100%;padding: 10px;background-color: #5cb85c;color: white;border: none;cursor: pointer;}.error {color: red;text-align: center;}</style>
</head>
<body><div class="container"><h2>Login</h2><form method="POST" action="/login"><div class="form-group"><label for="username">Username</label><input type="text" id="username" name="username" required></div><div class="form-group"><label for="password">Password</label><input type="password" id="password" name="password" required></div>{% if error %}<p class="error">{{ error }}</p>{% endif %}<div class="form-group"><button type="submit">Login</button></div></form></div>
</body>
</html>

后端应用:

from flask import Flask, render_template, request, redirect, url_for, flash, sessionapp = Flask(__name__)
app.secret_key = 'your_secret_key'  # 用于会话加密,可以换成自己的密钥# 假设的用户数据,实际应用应从数据库中获取
users = {'admin': '123456','ma': 'nong'
}@app.route('/')
def index():if 'username' in session:return f'Logged in as {session["username"]}. <a href="/logout">Logout</a>'return redirect(url_for('login'))@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':username = request.form['username']password = request.form['password']# 检查用户名和密码if username in users and users[username] == password:session['username'] = usernamereturn redirect(url_for('index'))else:error = 'Invalid username or password.'return render_template('login.html', error=error)return render_template('login.html')@app.route('/logout')
def logout():session.pop('username', None)return redirect(url_for('login'))if __name__ == '__main__':app.run(debug=True)

账号和密码分别是这两个

  • 账号:admin,密码: 123456
  • 账号:ma ,密码:nong

登录成功后:

在这里插入图片描述

包括登录失败 以及 字段没有输入的捕捉情况:

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python基于flask框架的智能停车场车位系统 数据可视化分析系统fyfc81
  • 王道408考研数据结构-栈、队列和数组-第三章
  • CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)
  • 改进拖放PDF转换为图片在转换为TXT文件的程序
  • 树与图的深度优先遍历(dfs的图论中的应用)
  • CleanClip For Mac 強大的剪貼簿助手Paste替代工具 v2.2.1
  • JVM 语言与生态
  • 408算法题leetcode--第10天
  • 基于Python的人工智能应用案例系列(5):手写数字聚类
  • 【matlab安装】最近换磁盘重装电脑安装matlab遇到几个问题
  • 【C++】list容器的基本使用
  • 音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现
  • 【Python语言初识(二)】
  • 快速响应:提升前端页面加载速度技巧的必知策略方案
  • 【React】React18.2.0核心源码解读
  • 【刷算法】求1+2+3+...+n
  • 30天自制操作系统-2
  • ECMAScript入门(七)--Module语法
  • Hibernate【inverse和cascade属性】知识要点
  • javascript面向对象之创建对象
  • JavaScript设计模式之工厂模式
  • maven工程打包jar以及java jar命令的classpath使用
  • Netty源码解析1-Buffer
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • 对超线程几个不同角度的解释
  • 后端_ThinkPHP5
  • 前嗅ForeSpider中数据浏览界面介绍
  • 巧用 TypeScript (一)
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 一个SAP顾问在美国的这些年
  • 回归生活:清理微信公众号
  • 如何正确理解,内页权重高于首页?
  • ​一些不规范的GTID使用场景
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT项目实战(天气预报)
  • $$$$GB2312-80区位编码表$$$$
  • (04)odoo视图操作
  • (C语言)fread与fwrite详解
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (南京观海微电子)——COF介绍
  • (四)js前端开发中设计模式之工厂方法模式
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)菜鸟学数据库(三)——存储过程
  • (转)使用VMware vSphere标准交换机设置网络连接
  • **CI中自动类加载的用法总结
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET MVC 验证码
  • .Net Winform开发笔记(一)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码