Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django视图中使用字典_Python_Database_Django_Dictionary - Fatal编程技术网

Python 在django视图中使用字典

Python 在django视图中使用字典,python,database,django,dictionary,Python,Database,Django,Dictionary,在我的django应用程序中,我需要在用户名和文件名之间创建一个映射。当用户选择一个特定文件时,程序会将该用户名和文件名之间的映射关联起来 为了使用python字典,我尝试了以下方法: views.py ---------- uname_file_map ={} def user_select_file(request): filename = get_filename_from_request() username = request.user.username u

在我的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和firefox
),以两个不同的用户身份登录并选择两个不同的文件时,它可以正常工作。我想知道的是,如果许多用户同时登录并选择不同的文件,这会不会中断,因为所有用户都使用同一个dictionary实例


使用两个
数据库
用户和文件名id字段
文件名
是更好的解决方案吗?或者字典足够了吗?

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

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友好”,而纯python解决方案需要检查几个安全问题,如您提到的并发性。

为什么不使用一个模型来实现您想要的呢

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友好”,而纯python解决方案需要检查几个安全问题,如您提到的并发性

当我使用两个浏览器(chrome和firefox),以两个不同的用户身份登录并选择两个不同的文件时,它可以毫无问题地工作

它起作用了/

只要您在单线程/单进程服务器上运行此代码,并且该进程没有重新启动,那么如果您希望在给定的时间为每个用户使用一个文件进行非持久性映射,并且您不关心在任何给定的时间要处理的文件,那么它“某种程度上”是可行的

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

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

当我使用两个浏览器(chrome和firefox),以两个不同的用户身份登录并选择两个不同的文件时,它可以毫无问题地工作

它起作用了/

只要您在单线程/单进程服务器上运行此代码,并且该进程没有重新启动,那么如果您希望在给定的时间为每个用户使用一个文件进行非持久性映射,并且您不关心在任何给定的时间要处理的文件,那么它“某种程度上”是可行的

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


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

+1,虽然
file
可能是一个charfield而不是FK。但最好不要使用“file”作为字段名,因为这是为内置函数保留的。另外,如果服务器使用多个进程来处理请求,并且在重新启动之间不会保留任何工作结果,则原始作者的示例可能无法正常工作。+1,尽管
file
可能是charfield而不是FK。但最好不要使用“file”作为字段名,因为这是为内置函数保留的。另外,若服务器使用多个进程来服务请求,并且在重启之间不会保留任何工作结果,那个么原始作者的示例可能无法正常工作。