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
相关产品推荐
相关产品推荐

