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

Flask登录报错:TypeError: 'NoneType' object is not subscriptable 求助

Flask登录功能错误修复方案

问题根源很明确:当输入错误的账号或密码时,数据库查询不到匹配的记录,cursor.fetchone()会返回None。这时候直接执行user[0]就会触发TypeError——因为None是无类型对象,不支持下标访问。

修复后的代码

from flask import Flask, flash, jsonify
from mysql import connector
from flask import request, redirect, url_for, session
from flask import render_template
from flask_login import LoginManager
from datetime import datetime


app = Flask(__name__)
app.secret_key = 'many random bytes'

db = connector.connect(
    host = 'localhost',
    user = 'root',
    passwd = '',
    database = 'rumahbuku'
)

if db.is_connected():
    print('Connection Successfull')



@app.route('/login/', methods = ['GET', 'POST'])
def login():
    message = ''
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        cursor = db.cursor(buffered=True)
        cursor.execute(
            'SELECT * from login WHERE username = %s AND password = %s',
                (username, password))
        user = cursor.fetchone()
        # 先判断是否查询到用户
        if user:
            if user[0] == 'admin':
                session['loggedin'] = True
                message = 'Logged In Successfull'
                return redirect('/dashboard_kasir')
            else:
                message = '您的账号无权限访问此页面'
        else:
            message = '请输入正确的用户名或密码'
    return render_template('login.html', message=message)

关键修改说明

  • 新增if user:判断:先确认数据库查询到了有效记录,再去访问user[0],避免None对象的下标访问错误
  • 拆分逻辑分支:
    • 当查询到用户时,再判断是否为admin账号,对应权限跳转
    • 当查询不到用户时,直接返回账号密码错误提示
    • 额外补充了非admin账号的提示(可选,你也可以合并到账号密码错误提示里)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:09:59