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

注册校验时触发pymongo.ServerSelectionTimeoutError错误求助

解决方案

核心问题分析

错误的直接原因是代码配置了MongoDB Atlas远程集群的连接字符串,但实际初始化客户端时却指向了本地未启动的MongoDB服务,导致连接localhost:27017被拒绝。同时原代码的用户存在校验逻辑存在冗余,可优化。

具体修复步骤

1. 修正MongoDB客户端连接

删除本地连接的代码,改用你已配置的Atlas连接字符串创建客户端:

app = Flask(__name__,static_url_path='',static_folder="static")
app.secret_key = 'just a string'
app.config["MONGO_URI"] = "mongodb+srv://Beny1320001:Beny132001@cluster0.dn45iia.mongodb.net/?retryWrites=true&w=majority"
# 替换原来的localhost连接,使用配置好的Atlas URI
myclient = pymongo.MongoClient(app.config["MONGO_URI"])
user_db = myclient["authentication"]
user_table = user_db["user_info"]

2. 优化用户存在校验逻辑

原代码通过for循环遍历查询结果的方式完全冗余,使用find_one可以直接判断用户是否存在,既简化代码又提升效率:

@app.route("/register_check", methods=['GET', 'POST'])
def register_check():
    if request.method == 'POST':
        req = dict(request.form)
        # 直接查询是否存在对应uid的用户
        existing_user = user_table.find_one({'uid': req['uid']})
        req_dict = {'uid': req['uid'], 'email': req['email'], 'password': req['password']}
        
        if not existing_user:
            user_table.insert_one(req_dict)
            return render_template('dashboard.html', uid=req['uid'])
        else:
            return render_template('invalid.html', message='User already exists')
    return render_template('register.html')

3. 额外验证项

  • 登录MongoDB Atlas控制台,确认你的当前IP地址已添加到集群的IP白名单中(否则会被拒绝连接)
  • 检查连接字符串中的用户名、密码、集群域名是否完全正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:25:26