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

Python服务器端登录脚本获取用户名为空问题求助

登录时用户名被识别为空的问题分析与解决

嘿,我一眼就揪出问题所在了——你的HTML表单和Python脚本里的参数名称不匹配,导致脚本根本拿不到你输入的用户名!

问题根源

先看你的HTML表单里的用户名输入框:

<input type="text" name="uname" id="username" placeholder="USERNAME">

这里的核心属性name是uname,但你的Python脚本里却一直在检查username这个键:

if not 'username' in form_data:
    print('The username should not be empty')

CGI的FieldStorage是严格根据表单元素的name属性来获取提交参数的,脚本里找不到username这个参数,自然就判定用户名是空的。

两种解决办法(二选一即可)

方案1:修改HTML表单,统一参数名

把用户名输入框的name改成username,和脚本里的键对应上:

<input type="text" name="username" id="username" placeholder="USERNAME">

同时建议给表单补上method="POST"和明确的action路径(指向你的Python脚本),这样更规范:

<form id="registration" action="/cgi-bin/your-login-script.py" method="POST">
  <!-- 其他表单元素不变 -->
</form>

方案2:修改Python脚本,适配表单参数名

把脚本里的判断和参数匹配逻辑改成用uname:

print('Cache-Control: no-cache')
print('Content-type: text/plain; charset=utf-8')
print('')
import cgi, pickle, hashlib

data_file = open('../data/user.dat','rb')
data = pickle.loads(data_file.read())
data_file.close()

form_data = dict()
form = cgi.FieldStorage()
for name in form.keys():
    if name.lower() == 'userpwd':
        form_data[name] = hashlib.sha512(form.getfirst(name).encode('utf-8')).hexdigest()
    else:
        form_data[name] = form.getfirst(name)

# 把判断逻辑里的username改成uname
if not 'uname' in form_data:
    print('The username should not be empty')
elif not 'userpwd' in form_data:
    print('Le mot de pass ne doit pas être vide.')
elif form_data['uname'] == data['username'] and form_data['userpwd'] == data['userpwd']:
    print("Bonjour %s %s !" % (data['firstname'], data['lastname']))
else:
    print('Le nom d\'utilisateur et le mot de pass sont invalides.')

额外提醒

  • 提交登录数据建议用POST方法,比默认的GET更安全,避免密码出现在URL里;
  • 打开文件时最好用with语句,自动处理文件关闭,避免资源泄漏:
    with open('../data/user.dat','rb') as data_file:
        data = pickle.loads(data_file.read())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:01