Python与MongoDB 用户管理系统实现:登录与注册功能详解

在现代应用开发中,用户管理系统是大多数应用的核心组成部分。本文将详细介绍如何使用 Python 和 MongoDB 构建一个简单但功能完整的用户管理系统,包括用户注册、登录以及密码重置功能。

MongoDB 简介

MongoDB 是一个基于分布式文件存储的开源数据库系统,使用类似 JSON 的 BSON 格式存储数据。它属于 NoSQL 数据库,支持灵活的数据模型,非常适合快速开发和迭代的应用场景。

一、下载 MongoDB 社区版

  1. 访问下载页面

    打开 MongoDB 官方下载中心:Download MongoDB Community Server | MongoDB

  2. 选择版本和配置

    • Version:选择最新 LTS 版本(如 6.0.x)。
    • OS:选择 Windows。
    • Package :选择 msi 安装包(适合图形界面安装)。
  3. 下载安装包

    点击 Download 按钮开始下载。

二、安装 MongoDB

  1. 运行安装程序

    双击下载的 .msi 文件,按提示完成安装:

    • 选择安装类型 :选择 Complete(完整安装)。
    • 安装路径 :默认路径为 C:\Program Files\MongoDB\Server\6.0\(版本号可能不同)。
    • 服务配置 :勾选 Install MongoDB as a Service(作为服务安装)和 Run service as Network Service user
    • 数据目录 :默认数据目录为 C:\data\db\,日志目录为 C:\data\log\
  2. 创建数据目录

    安装完成后,手动创建数据目录:

    powershell

    复制代码
    mkdir C:\data\db
    mkdir C:\data\log

三、配置环境变量

将 MongoDB 的 bin 目录添加到系统环境变量中,以便在任意位置使用 mongomongosh 命令:

  1. 右键点击 此电脑属性高级系统设置环境变量
  2. 编辑系统变量 Path
    • 点击 新建,添加路径:C:\Program Files\MongoDB\Server\6.0\bin\(根据实际安装路径调整)。
    • 确认保存所有窗口。

四、启动 MongoDB 服务

  1. 通过服务管理器启动

    • 按下 Win + R 打开运行窗口,输入 services.msc 打开服务管理器。
    • 找到 MongoDB Server (MongoDB) 服务,右键选择 启动
  2. 验证服务状态

    服务状态应为 正在运行,启动类型为 自动

五、验证安装

  1. 打开命令提示符

    按下 Win + R 输入 cmd,打开命令提示符窗口。

  2. 连接 MongoDB

    使用 mongosh(MongoDB 6.0+ 的新 shell)连接数据库:

    bash

    复制代码
    mongosh

    如果看到类似以下输出,说明连接成功:

    plaintext

    复制代码
    Current Mongosh Log ID: 68318e8a2d6e8b3b3e5a3d7f
    Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.6
    Using MongoDB:          6.0.14
    Using Mongosh:          1.10.6
    
    test> 
  3. 执行简单命令

    mongosh 中执行以下命令,创建一个测试数据库和集合:

    javascript

    复制代码
    use testdb
    db.users.insertOne({ name: "Test User", age: 30 })
    db.users.find()

六、常见问题及解决方案

  1. 服务无法启动

    • 检查数据目录(C:\data\db)是否存在且有写入权限。
    • 查看日志文件 C:\data\log\mongod.log 获取详细错误信息。
  2. 找不到 mongosh 命令

    • 确认环境变量 Path 是否已正确配置。
    • 尝试重启命令提示符窗口。
  3. 连接被拒绝

    • 确认 MongoDB 服务正在运行。
    • 检查防火墙是否阻止了 27017 端口。

七、卸载 MongoDB

若需卸载 MongoDB,可按以下步骤操作:

  1. 停止服务

    在服务管理器中停止 MongoDB Server (MongoDB) 服务。

  2. 卸载程序

    通过 控制面板程序卸载程序,选择 MongoDB 并卸载。

  3. 删除残留文件

    删除安装目录(默认 C:\Program Files\MongoDB\)和数据目录(C:\data\)。

八、安全配置建议

  1. 启用身份验证

    修改配置文件 C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg,添加:

    yaml

    复制代码
    security:
      authorization: enabled

    重启服务后,需通过用户名和密码连接数据库。

  2. 限制网络访问

    默认仅允许本地连接。如需远程访问,修改配置文件:

    yaml

    复制代码
    net:
      bindIp: 0.0.0.0  # 允许所有 IP 访问(谨慎使用)
      # 或指定特定 IP:
      # bindIp: 127.0.0.1,192.168.1.100

在 Python 中使用 MongoDB,我们需要安装 pymongo 库,它提供了与 MongoDB 交互的完整 API。

系统功能实现

下面是一个使用 Python 和 MongoDB 实现的用户管理系统代码:

复制代码
import pymongo
import time

# 显示当前年月日
format = "%Y-%m-%d"  # 定义时间格式
now_time = time.strftime(format)  # 获取当前时间

# 连接mongodb
try:
    # 连接本地MongoDB数据库
    client = pymongo.MongoClient(host="192.168.1.9", port=27017)
    db = client['user']  # 选择数据库 'user'
    collection = db['userinfomation']  # 选择集合 'userinfomation'
except Exception as ex:
    # 如果连接失败,打印错误信息
    print("连接失败:", ex)

# 获取用户输入的用户
name = input("请输入您的用户名:")


def login():
    # 查找数据库中是否存在该用户名
    user_data = collection.find_one({'用户名': name})

    if not user_data:
        # 如果用户数据不存在,提示用户注册
        print("用户名不存在,请先注册!")
        return

    retry_count = 4  # 用户最大重试次数
    while retry_count > 0:
        # 提示用户输入密码
        print(f"用户名: '{name}'")
        password = input("请输入密码:")

        # 判断密码是否正确
        if user_data['密码'] == password:
            # 登录成功,打印欢迎信息
            print(f"登录时间: '{now_time}', 欢迎使用")
            break
        else:
            # 密码错误,重试次数减少
            retry_count -= 1
            print(f"用户名或密码错误, 还有{retry_count}次机会")

            if retry_count == 0:
                # 如果重试次数用尽,询问用户是否忘记密码
                forgot_password = input("是否忘记密码? 输入: '是' 或 '否': ")
                if forgot_password == '是':
                    # 如果用户忘记密码,提示输入密保答案
                    security_answer = input("请输入密保答案: ")
                    if user_data['密保问题'] == security_answer:
                        # 如果密保问题回答正确,允许重置密码
                        print("密保答案正确,您可以重置密码")
                        new_password = input("请输入新密码: ")
                        collection.update_one({'用户名': name}, {'$set': {'密码': new_password}})
                        print("密码已成功重置")
                    else:
                        # 如果密保答案错误,提示用户
                        print("密保答案错误")
                break


def register():
    # 注册过程:提示用户输入密码,检查密码长度
    password = input("请输入密码(密码长度大于6):")
    while len(password) < 6:
        # 如果密码长度小于6,提示用户重新输入
        print("密码长度必须大于6")
        password = input("请输入密码(密码长度大于6):")

    # 用户输入密保问题
    security_question = input("请输入密保问题:")

    print("正在为你注册...")  # 注册提示
    # 创建一个包含用户名、密码和密保问题的数据字典
    data = {
        "用户名": name,
        "密码": password,
        "密保问题": security_question
    }
    # 将用户数据插入到MongoDB集合中
    collection.insert_one(data)
    print("注册成功!")
    # 注册成功后直接跳转到登录
    login()


# 检查用户名是否已存在
if collection.find_one({'用户名': name}):
    # 如果用户名存在,提示用户登录
    print("用户名已存在,请登录")
    login()
else:
    # 如果用户名不存在,开始注册流程
    print("用户名不存在,开始注册流程...")
    register()

运行结果

复制代码
请输入您注册的用户名:智极Hub
用户名不存在,开始注册流程...
请输入密码(密码长度大于6):abc123
请输入密保问题:您最喜欢的颜色?
正在为你注册...
注册成功!
用户名: '智极Hub'
请输入密码:abc123
登录时间: '2025-05-24', 欢迎使用

请输入您注册的用户名:智极Hub
用户名已存在,请登录
用户名: '智极Hub'
请输入密码:abc123
登录时间: '2025-05-24', 欢迎使用

代码解析

这个用户管理系统包含以下几个主要功能模块:

数据库连接

python

复制代码
try:
    client = pymongo.MongoClient(host="192.168.1.9", port=27017)
    db = client['user']
    collection = db['userinfomation']
except Exception as ex:
    print("连接失败:", ex)

这段代码尝试连接到本地 MongoDB 服务器,并选择 user 数据库中的 userinfomation 集合。如果连接失败,会捕获异常并打印错误信息。

用户登录功能

登录功能实现了以下逻辑:

  • 检查用户名是否存在
  • 提供密码重试机制(最多 4 次尝试)
  • 密码验证成功后显示登录时间
  • 重试次数用尽后提供密码重置选项

用户注册功能

注册功能包含:

  • 密码长度验证(至少 6 个字符)
  • 密保问题设置
  • 用户数据插入 MongoDB
  • 注册成功后自动跳转到登录界面

密码重置功能

当用户多次登录失败并选择忘记密码时,系统会要求用户输入预先设置的密保问题答案。验证通过后,用户可以设置新密码。

相关推荐
比特森林探险记4 分钟前
Go语言结构体:数据组织的艺术
开发语言·后端·golang
橙色小博6 分钟前
Python中openpyxl库的基础解析与代码实例
前端·python·excel·openpyxl
小叶爱吃鱼12 分钟前
web自动化-Selenium、Playwright、Robot Framework等自动化框架使用场景优劣对比
python·selenium·自动化
smilejingwei29 分钟前
SPL 轻量级多源混算实践 4 - 查询 MongoDB
数据库·mongodb·esprocspl
find_element_by_id2 小时前
mongodb nosql数据库笔记
笔记·mongodb·nosql
元直数字电路验证2 小时前
[DS]使用 Python 库中自带的数据集来实现上述 50 个数据分析和数据可视化程序的示例代码
python·信息可视化·数据分析
AI糊涂是福2 小时前
MATLAB语言教程:从入门到精通的全面指南
开发语言·matlab·信息可视化
jz_ddk3 小时前
[学习] C语言多维指针探讨(代码示例)
linux·c语言·开发语言·学习·算法
He_k4 小时前
‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry
开发语言·javascript·ecmascript
星夜9825 小时前
C++回顾 Day6
开发语言·数据结构·c++·算法