[网站搭建]动态文件路径管理方案:告别硬编码,实现自动化用户数据切换

引言

在开发数据分析系统时,我们经常会遇到这样的问题:每次新增用户数据都需要手动修改代码中的文件路径。本文将分享一个实际项目中的解决方案,通过动态文件路径管理,实现了多用户数据的自动识别和切换。

问题背景

原系统中的文件路径是硬编码的:

复制代码
STATS_FILE = r'D:/network/stats2.txt'
HR_FILE = r'D:/network/hr2.txt'

每次采集不同用户的数据后,都需要手动修改这些路径才能查看对应数据,效率极低且容易出错。

解决方案架构

我们采用前后端协同的方案来解决这个问题:

后端实现

1. 动态文件路径生成

复制代码
def get_file_paths(user_tag=None):
    """根据用户标签动态生成文件路径"""
    if user_tag:
        base_dir = os.path.dirname(os.path.abspath(__file__))
        stats_file = os.path.join(base_dir, f"{user_tag}_stats2.txt")
        hr_file = os.path.join(base_dir, f"{user_tag}_hr2.txt")
        
        if os.path.exists(stats_file) and os.path.exists(hr_file):
            return stats_file, hr_file
    
    return DEFAULT_STATS_FILE, DEFAULT_HR_FILE

2. 用户列表自动发现

复制代码
def get_available_users():
    """获取所有可用的用户数据文件"""
    base_dir = os.path.dirname(os.path.abspath(__file__))
    users = []
    
    for filename in os.listdir(base_dir):
        if filename.endswith('_stats2.txt'):
            user_tag = filename.replace('_stats2.txt', '')
            hr_file = os.path.join(base_dir, f"{user_tag}_hr2.txt")
            if os.path.exists(hr_file):
                users.append(user_tag)
    
    return sorted(users)

3. 新增API端点

端点 方法 描述
/get_users GET 获取所有可用用户列表
/get_stats GET 获取指定用户数据

前端实现

1. 用户选择器UI

复制代码
<span style="margin-left:20px;">
    数据用户:
    <select id="user_selector">
        <option value="">默认用户</option>
    </select>
</span>

2. 动态加载用户列表

复制代码
function initUserSelector() {
    fetch('http://127.0.0.1:5002/get_users')
        .then(res => res.json())
        .then(data => {
            const userSelector = document.getElementById('user_selector');
            data.users.forEach(user => {
                userSelector.innerHTML += `<option value="${user}">${user}</option>`;
            });
        });
}

3. 数据动态加载

复制代码
document.getElementById('load_stats_btn').onclick = function() {
    const selectedUser = document.getElementById('user_selector').value;
    const url = selectedUser ? 
        `http://127.0.0.1:5002/get_stats?user=${encodeURIComponent(selectedUser)}` : 
        'http://127.0.0.1:5002/get_stats';
    
    fetch(url)
        .then(res => res.json())
        .then(data => {
            // 更新图表和表格
        });
};

文件命名规范

系统会自动识别符合以下规则的文件:

复制代码
{用户标签}_stats2.txt
{用户标签}_hr2.txt

建议用户标签格式:机构_姓名_ID

示例:

  • www_z_002_stats2.txt

  • www_z_002_hr2.txt

相关推荐
开开心心就好23 分钟前
免费流畅的远程控制实用工具
linux·运维·服务器·网络·智能手机·excel
代码熬夜敲Q2 小时前
ENSP 网络工程实验
linux·运维·服务器
銳昊城2 小时前
项目七: 配置与管理Web服务器(2) C2
运维·服务器
Muyuan19982 小时前
30.通过Claude code做项目系统测试
运维·服务器·人工智能·fastapi
yyuuuzz2 小时前
aws的核心概念与常见使用场景
运维·服务器·网络·云计算·aws
2601_954526753 小时前
逆向解析Temu底层动销算法:基于API高并发轮询与全域存量透视的自动化架构重构
算法·架构·自动化
KivenMitnick3 小时前
LovelyERes:AWD适用的蓝队综合工具
运维·安全·网络安全
赵药师3 小时前
dpkg: warning: files list file for package ‘libselinux1:amd64‘ missing;
linux·运维·服务器
zt1985q3 小时前
本地部署开源内容管理系统 Typemill 并实现外部访问
运维·服务器·开源
ElevenS_it1883 小时前
网络没完全断但业务已经受影响:「灰色故障」排查的完整方法论
运维·服务器·网络