You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask登录会话异常:登录后无法跳转至Index页面求助

Flask登录会话功能异常修复方案

问题描述

基于Python Flask框架开发带登录模块的应用,尝试在登录页与Index页间建立会话,但登录会话功能无法正常工作。

报错信息

报错信息

相关代码

app.py

# 从flask模块导入Flask类
from flask import Flask, render_template, redirect, url_for, request, session

# 创建应用对象
app = Flask(__name__)
app.secret_key = "hello"

# 使用装饰器将函数与URL关联
#@app.route('/')
#def home():
 #   return "Hello, World!"  # 返回字符串

@app.route('/index', methods=['GET'])
def index():
    if session.get ('username'):
        return render_template('index.html')
    else:    
        return render_template('login.html')  # 渲染模板

# 处理登录页面逻辑的路由
@app.route('/', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'admin':
            error = 'Invalid Credentials. Please try again.'  
        else:    
         session['username'] = True
         return redirect(url_for('index'))
    return render_template('login.html', error=error)


# 使用run()方法启动服务器
if __name__ == '__main__':
    app.run(debug=True)

login.html

<html>
  <head>
    <title>Flask Intro - login page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <div class="container">
      <h1>请登录</h1>
      <br>
      <form action="" method="post">
        <input type="text" placeholder="用户名" name="username" value="{{
          request.form.username }}">
         <input type="password" placeholder="密码" name="password" value="{{
          request.form.password }}">
        <input class="btn btn-default" type="submit" value="登录">
      </form>
      {% if error %}
        <p class="error"><strong>错误:</strong> {{ error }}</p>
      {% endif %}
    </div>
  </body>
</html>

index.html

<!DOCTYPE Html>
    <html>
    <head>
    <title>站点页面</title>
    </head>
    <body>
    <address>欢迎访问。</address>
    </body>
</html>

修复步骤

  1. 修正会话存储与判断逻辑
    登录成功后建议存储实际用户名而非布尔值,同时在index路由中重定向到登录路由而非直接渲染模板,保持路由一致性:
    修改app.py中login函数的成功分支:

    else:    
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    

    修改index函数:

    def index():
        if session.get('username'):
            return render_template('index.html')
        else:    
            return redirect(url_for('login'))
    
  2. 修复index.html的标题标签错误
    将原代码中的<tile>标签修正为标准的<title>标签,确保页面标题正常显示。

  3. 优化表单提交路径(可选)
    为login.html的表单明确指定提交路径,避免路径歧义:

    <form action="{{ url_for('login') }}" method="post">
    
  4. 提升secret_key安全性(生产环境必做)
    开发环境可临时使用简单密钥,但生产环境需使用随机复杂字符串:

    import os
    app.secret_key = os.urandom(24)
    

内容的提问来源于stack exchange,提问作者Fregene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:30:57