我如何使用Django有持续会话变量?

问题描述 投票:0回答:1

我在我的数据库中的触发器将基于会话变量的值自动更新row_modified_by_user列。

要做到这一点在Django,我相信我将不得不把这个在我的settings.py文件:

'my_db': {
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': 'my_db_name',
    'USER': 'my_db_user',
    'PASSWORD': '******',
    'HOST': 'my_host',
    'PORT': '12345',
    'OPTIONS': {
        'init_command': "SET @SessionForUser = '" + CURRENT_USER + "'",
    }
}

现在,CURRENT_USER正在登录的用户。我如何从我的views.py这个值传递给我的settings.py?

请注意,执行命令后,我无法使用连接光标我views.py因为连接不持久的,它是继关闭,所以会话变量被清除:

with connections['my_db'].cursor() as cursor:
    cursor = connection.cursor()
    cursor.execute("SET @SessionForUser = '" + CURRENT_USER + "'")                

我不能使用全局变量或者是因为这仅用于读取(不写)值:

settings.CURRENT_USER = username

什么是这个一个很好的选择?也许我错误地处理这个问题?

python django
1个回答
0
投票

好了,考虑到丹尼尔的评论,我已经决定要使用不同的方法:

这是现在我在我的保存方法使用:

def save(request, form):
[...]
   item = form.save(commit=False)

   if item._state.adding:
       item.created_by_username = request.user.username
   else:
       item.modified_by_username = request.user.username

   item.save()
[...]

此外,我的数据库有触发时的用户名字段更新为更新的时间戳。或者,我可以做用这个代替那些时间戳Django的方式:

https://timonweb.com/tutorials/automatic-created-and-updated-datetime-fields-for-django-models/

© www.soinside.com 2019 - 2024. All rights reserved.