如何实现用户名和密码动态化以避免硬编码?附Python代码求助
实现MongoDB用户名密码动态化的几种方案
下面给你几种不用硬编码用户名密码的实现方式,都封装成了函数,你可以根据使用场景选择:
1. 从环境变量读取(推荐生产环境用)
把用户名密码存在系统环境变量里,代码通过函数读取,部署时只需配置环境变量,不用修改代码本身。
from pymongo import MongoClient import os import urllib.parse def get_mongo_credentials(): # 从环境变量获取用户名和密码 username = os.getenv("MONGO_USER") password = os.getenv("MONGO_PASS") # 对密码做URL编码,避免特殊字符导致连接报错 encoded_username = urllib.parse.quote_plus(username) encoded_password = urllib.parse.quote_plus(password) return encoded_username, encoded_password # 获取动态凭证 user, pwd = get_mongo_credentials() # 构建连接字符串并初始化客户端 mongo_client = MongoClient( f"mongodb+srv://{user}:{pwd}@your-cluster-url.tld/", tls=True ) db = mongo_client.your_database_name result = db.your_collection.find() print(result.next())
使用前需设置环境变量:
- Windows:
set MONGO_USER=你的用户名和set MONGO_PASS=你的密码 - Linux/macOS:
export MONGO_USER=你的用户名和export MONGO_PASS=你的密码
2. 从本地配置文件读取(适合本地开发)
把用户名密码存在单独的配置文件中(比如JSON格式),用函数读取文件内容。
先创建mongo_config.json配置文件:
{ "username": "你的用户名", "password": "你的密码" }
然后在代码中读取:
from pymongo import MongoClient import json import urllib.parse def get_mongo_credentials(): with open("mongo_config.json", "r") as f: config = json.load(f) encoded_username = urllib.parse.quote_plus(config["username"]) encoded_password = urllib.parse.quote_plus(config["password"]) return encoded_username, encoded_password # 获取动态凭证 user, pwd = get_mongo_credentials() mongo_client = MongoClient( f"mongodb+srv://{user}:{pwd}@your-cluster-url.tld/", tls=True ) db = mongo_client.your_database_name result = db.your_collection.find() print(result.next())
注意:记得把配置文件加入.gitignore,避免意外提交到代码仓库。
3. 交互式输入(适合临时测试)
运行代码时让用户手动输入用户名和密码,无需提前配置任何内容。
from pymongo import MongoClient import urllib.parse def get_mongo_credentials(): username = input("请输入MongoDB用户名:") password = input("请输入MongoDB密码:") encoded_username = urllib.parse.quote_plus(username) encoded_password = urllib.parse.quote_plus(password) return encoded_username, encoded_password # 获取动态凭证 user, pwd = get_mongo_credentials() mongo_client = MongoClient( f"mongodb+srv://{user}:{pwd}@your-cluster-url.tld/", tls=True ) db = mongo_client.your_database_name result = db.your_collection.find() print(result.next())
内容的提问来源于stack exchange,提问作者slimshaney
相关产品推荐
相关产品推荐

