在Django vi中使用字典

2024-05-14 07:55:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的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),以两个不同的用户身份登录并选择两个不同的文件时,它的工作没有任何问题。我想知道的是,如果许多用户同时登录并选择不同的文件,因为所有人都使用同一个dictionary实例,是否会出现这种情况。在

使用两个databaseUser with a filename_id field和{}是更好的解决方案吗?还是字典足够了?在


Tags: 文件django用户mapget字典文件名request
2条回答

It works without any problem when I use two browsers(chrome and firefox) , login as two different users and select two different files.

有效/似乎有效

只要您在单线程/单进程服务器上运行这段代码,并且进程没有重新启动,那么如果您希望在给定时间每个用户使用一个文件进行非持久性映射,并且您不关心在任何给定的时间要处理哪个文件,那么它就“有点”起作用了。在

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

照马丁说的做,用模型;)

你为什么不用一个模型来实现你想要的呢?在

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”,正如您所提到的,它需要检查几个安全问题,比如并发性。在

相关问题 更多 >

    热门问题