0

在我的 django 应用程序中,我需要创建用户名和文件名之间的映射。当用户选择特定文件时,程序会关联该用户名和文件名之间的映射。

要使用 python 字典,我尝试如下:

views.py
----------

uname_file_map ={}

def user_select_file(request):
    filename = get_filename_from_request()
    username = request.user.username
    uname_file_map[username] = filename
    ....

def do_some_file_ops(request):
   username = request.user.username
   process_file_contents(uname_file_map.get(username))
   ...

当我使用两个浏览器(chrome and firefox)时,它可以正常工作,以两个不同的用户身份登录并选择两个不同的文件。我想知道的是,如果许多用户同时登录并选择不同的文件,这是否会中断,因为所有人都使用相同的字典实例。

使用两个databaseUser with a filename_id fieldFilename更好的解决方案吗?还是字典就够了?

4

2 回答 2

2

当我使用两个浏览器(chrome 和 firefox),以两个不同的用户登录并选择两个不同的文件时,它可以正常工作。

s/它有效/它似乎有效/

只要您在单线程/单进程服务器上运行此代码,并且该进程未重新启动,如果您想要的是每个用户在单个文件的非持久映射,它“有点”工作在给定的时间,您只是不在乎在任何给定的时间要处理什么文件。

一旦您在多线程或多进程环境中部署代码,这将完全中断。

IOW:按照马丁说的做,使用模型;)

于 2012-06-19T10:49:15.170 回答
1

你为什么不使用模型来实现你正在寻找的东西?

class FileMapping(models.Model):
    user = models.ForeignKey(User)
    file_name = models.CharField(_('filename'))


def user_select_file(request):
    filename = get_filename_from_request()
    fm = FileMapping(user=request.user, file_name=filename)
    ....

def do_some_file_ops(request):
   fm = FileMapping.objects.filter(user=request.user)
   process_file_contents(fm)

我认为它比使用纯 python 解决方案更“django 友好”,需要检查几个安全问题,例如你提到的并发。

于 2012-06-19T09:55:06.037 回答