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

发布于:2025-05-29 ⋅ 阅读:(121) ⋅ 点赞:(0)

在现代应用开发中,用户管理系统是大多数应用的核心组成部分。本文将详细介绍如何使用 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 目录添加到系统环境变量中,以便在任意位置使用 mongo 或 mongosh 命令:

  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
  • 注册成功后自动跳转到登录界面

密码重置功能

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


网站公告

今日签到

点亮在社区的每一天
去签到