Flask登录验证实战:从零构建一个基础的账号密码登录系统

还在为Web应用的用户登录功能头疼吗?据统计,近70%的安全漏洞与身份验证不当有关。

本文将带你快速上手Flask登录验证的核心实战!从登录验证的几种常见形式讲起,并手把手教你实现最基础的账号密码验证:从前端模板制作表单,到后端接收并校验数据,再到根据结果返回欢迎页或错误提示。代码简洁清晰,可直接用于你的项目。

✨ 主要内容

  • 🔐 为什么登录验证如此重要?
  • 📝 Flask登录验证的几种常见形式概览
  • 🛠️ 实战准备:创建Flask项目与目录结构
  • 💻 一步步构建账号密码登录验证
  • 🚀 完整代码参考与扩展思路

🔐 为什么登录验证如此重要?

登录验证是Web应用的"守门人"。它不仅是保护用户隐私和数据安全的第一道防线,更是实现个性化服务(如"我的订单"、"个人主页")的基础。一个健壮且用户体验良好的登录系统,是项目成功的基石。

📝 Flask登录验证的几种常见形式概览

在Flask生态中,实现登录验证有多种方式,各有适用场景:

  • 基于Session的账号密码验证 :最经典、最基础的方式,用户凭密码登录后,服务器在其Session中标记登录状态。本文重点演示这种方式。
  • 第三方OAuth登录 :如"微信登录"、"GitHub登录",利用大平台的账号体系,简化用户注册流程,提升体验。
  • Token验证(如JWT) :常用于前后端分离项目或API接口。用户登录后获取一个加密的Token,后续请求在Header中携带此Token来证明身份。
  • 单点登录 :在多个互相关联的系统间,用户只需登录一次。实现较复杂,通常用于企业级应用。

🛠️ 实战准备:创建Flask项目与目录结构

首先,确保你已安装Flask。然后,创建一个清晰的项目目录:

复制代码
your_flask_app/
├── app.py          # 主应用文件
└── templates/      # 模板文件夹
    ├── login.html     # 登录页面模板
    └── welcome.html   # 登录成功欢迎页面模板

💻 一步步构建账号密码登录验证

1. 编写登录页面模板(templates/login.html)

这是一个简单的表单,包含用户名、密码输入框和提交按钮。我们使用POST方法将数据提交到/login这个URL。

复制代码
<!-- templates/login.html -->
<!DOCTYPE html>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <h2>请登录</h2>
    <!-- 如果后端传回了error变量,则显示错误信息 -->
    {% if error %}
        <p style="color: red;"><strong>错误:</strong> {{ error }}</p>
    {% endif %}
    <form method="post" action="/login">
        <div>
            <label for="username">用户名:</label><br>
            <input type="text" id="username" name="username" required>
        </div>
        <div>
            <label for="password">密码:</label><br>
            <input type="password" id="password" name="password" required>
        </div>
        <div>
            <button type="submit">登录</button>
        </div>
    </form>
</body>
</html>

2. 编写欢迎页面模板(templates/welcome.html)

登录成功后跳转到的页面。

复制代码
<!-- templates/welcome.html -->
<!DOCTYPE html>
<html>
<head>
    <title>欢迎</title>
</head>
<body>
    <h1>欢迎回来,{{ username }}!</h1>
    <p>您已成功登录系统。</p>
</body>
</html>

3. 编写Flask后端逻辑(app.py

这是核心部分。我们创建路由,处理登录请求。

  • @app.route('/'): 访问首页时,直接跳转到登录页。

  • @app.route('/login', methods=['GET', 'POST']): 处理登录页面的GET请求(展示页面)和POST请求(处理表单提交)。

  • POST请求中,通过request.form.get('username')获取前端提交的用户名和密码。

  • 进行验证:这里我们硬编码了一个测试账号(admin/123456)进行模拟。在实际项目中,这里应该查询数据库。

  • 验证成功:使用session['username'] = username将用户名存入Session,标记用户已登录,然后渲染欢迎页面。

  • 验证失败:携带错误信息error重新渲染登录页面。

    app.py

    from flask import Flask, render_template, request, redirect, url_for, session

    app = Flask(name)
    app.secret_key = 'your_secret_key_here' # 设置密钥用于加密Session,务必使用复杂字符串!

    模拟的用户数据库(实际项目中应使用真实数据库)

    USER_CREDENTIALS = {
    'admin': '123456',
    'user1': 'password1'
    }

    @app.route('/')
    def index():
    if 'username' in session:
    return redirect(url_for('welcome'))
    return redirect(url_for('login'))

    @app.route('/login', methods=['GET', 'POST'])
    def login():
    error = None
    if request.method == 'POST':
    # 1. 获取表单数据
    username = request.form.get('username')
    password = request.form.get('password')

    复制代码
          # 2. 验证账号密码
          # 检查用户是否存在,并且密码是否匹配
          if username in USER_CREDENTIALS and USER_CREDENTIALS[username] == password:
              # 3. 验证成功:将用户信息存入Session
              session['username'] = username
              # 跳转到欢迎页面
              redirect(url_for('welcome'))
          else:
              # 4. 验证失败:返回错误信息
              error = '用户名或密码错误!'
    
      # GET请求,或POST请求验证失败时,显示登录页面
      return render_template('login.html', error=error)

    @app.route('/welcome')
    def welcome():
    if 'username' not in session:
    return redirect(url_for('login'))
    return render_template('home.html')

    if name == 'main':
    app.run(debug=True)

运行python app.py,访问 http://127.0.0.1:5000/,即可体验完整的登录流程。

关键点app.secret_key必须设置,否则session无法工作。登录状态通过检查session中是否存在username键值来判断。

🚀 完整代码参考与扩展思路

以上便是完整的代码。你可以直接复制,创建对应的文件并运行。在此基础上,你可以进行扩展:

  • 连接MySQL或SQLite数据库,替换硬编码的用户验证逻辑。
  • 为密码进行哈希加密存储(使用werkzeug.securitygenerate_password_hashcheck_password_hash),这是生产环境的必备安全措施
  • 添加注册页面和逻辑。
  • 实现"记住我"功能(通过设置session.permanent = True或使用Cookie)。
  • 使用Flask扩展如Flask-Login来管理更复杂的用户会话和状态,它能帮你轻松处理"用户是否已登录"的检查、记住我、登出等功能。

喜欢本文?不要错过✨,点赞👍收藏⭐关注我👆,一起学习更多有用的知识,完善你我的技能树!

相关推荐
superman超哥2 小时前
仓颉类型别名的使用方法深度解析
c语言·开发语言·c++·python·仓颉
卡尔特斯2 小时前
pyenv 安装的 python 版本缺少 tkinter 报错 import _tkinter # If this fails your Python xxx
python
3824278272 小时前
python :__call__方法
开发语言·python
八月ouc2 小时前
Python实战小游戏(三): 简易文件管理器
python·shutil·文件管理器·os.walk·pathlib
安冬的码畜日常3 小时前
【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
python·测试工具·django·接口测试·postman·fastapi·api项目
winfredzhang3 小时前
wxPython实战:打造一个优雅的图片预览工具
chrome·python·预览·剪切板
superman超哥3 小时前
仓颉GC调优参数深度解析
c语言·开发语言·c++·python·仓颉
Byron Loong3 小时前
【机器视觉】人物安全距离监测
python·yolo·计算机视觉