Python类实例仅适用于Djang中的当前用户

2024-09-24 22:21:19 发布

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

我是Django的新手,我想知道如何为当前用户保存一个类实例,确切地说,我想做的是将我的用户登录到Firebase,然后从Firebase上的数据库中检索数据,并将数据保存到一个本地类上,该类只有在用户注销后才可用,但是我保存这些类实例的所有尝试都使它们成为全局的(因此实际上每个用户都可以访问它们,并将覆盖上一个实例)

我的第一次尝试是在我的应用程序的views.py上,看起来是这样的:

APPMANAGER = FirebaseManager()

def homepage(request: HttpRequest) -> HttpResponse:
    APPManager.loadData(request.POST.get("data"))
    return HttpResponse("Done")

但是APPMANAGER将被全局保存(如果服务器重新启动,也将被删除)

我还检查了Django会话(https://docs.djangoproject.com/en/2.2/topics/http/sessions/),这似乎是我想要做的,但它只接受可序列化的数据,我想保存一个自定义类实例,最好的方法是什么


Tags: 数据django实例用户py数据库应用程序request
1条回答
网友
1楼 · 发布于 2024-09-24 22:21:19

感谢@FelipeFaria的评论,我能够实现我想要的

我使用了Django会话,在我看来,存储在数据库上的缓存是正确的方法,首先,我配置了会话,安装了下面的Django应用程序(实际上它是默认安装的)

设置.py

INSTALLED_APPS = [
    #otherApps
    'django.contrib.sessions',
    #OtherApps
]

然后我在另一行中添加了以下内容:

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

这将配置会话以在数据库上保存缓存,文档中说性能相当不错,但是一个简单的缓存系统是最好的,因为它忽略了持久性(我需要持久性)

之后,我用字典将所需的数据存储在Django提供的request.session字典上(请求是在每个Django视图上发送的HttpRequest),需要时,我创建了一个类的新实例,并运行一个方法从缓存加载所有属性

views.py示例

def index(request: HttpRequest) -> HttpResponse:
    if 'logged in' in request.session:
        user = User()
        user.load_data(request.session['user_data'])
        return render(request, "main/index.html", context={"user": user})        
    return redirect("main:index")

更好地解释getter、setter、deleter和那些在文档中有更好的解释:https://docs.djangoproject.com/en/2.2/topics/http/sessions/#configuring-sessions

相关问题 更多 >