zoukankan      html  css  js  c++  java
  • Django中非视图函数获取用户对象

    今天遇到了一个问题:在Django中怎么从非视图函数中获取用户对象?怎么保证不同的请求获取到不同的用户对象?
    平常我们获取用户对象使用的是:

    request.user
    

    不得不说,这确实很方便。
    但是,如果现在有两个类:

    # 注意,这两个类可以不在同一个py文件中
    
    
    # 视图类
    class Index(View):
        """
        功能集中调用
        """
        def post(self, request):
            return HttpResponse('你好!')
    
    # 工具类
    class IndexUtil:
        def get_user(self)
            return '怎么获取用户对象?'
    

    因为工具类并没有拿到request对象,所以无法利用request.user获取用户对象
    我的第一个想法是利用缓存,但问题是我没有办法将此次请求和此次请求的用户对象相关联,那就可能会导致此次请求拿到的是上次请求的用户对象,所以这个方案直接pass掉。
    之后又谷歌了很多资料,最后找到了一个完美的解决方案:利用线程存储用户对象,当然这需要一个请求对应一个线程。
    下面是具体的代码:

    # 注意,这两个类可以不在同一个py文件中
    
    # 视图类
    from threading import local
    thread = local()
    
    
    class Index(View):
        """
        功能集中调用
        """
        def post(self, request):
            global thread
            thread.user = request.user
            return HttpResponse('你好!')
    
    # 工具类
    class IndexUtil:
        def get_user(self)
            print(thread.user)
            return '怎么获取用户对象?'
    

    注意:如果两个类不再同一个文件中,那么有可能会遇到循环引用的问题。各位可以在我的另一篇博文中找到解决方案。

  • 相关阅读:
    ASP.NET 2.0 中改进的缓存功能
    Python 一门神奇的语言
    showModalDialog()、showModelessDialog()方法使用详解
    在VS2005中 GridView导入Excel的两点小技巧附源码
    DVB码流中业务信息与电子节目指南
    js 日历控件
    js收藏
    什么是ECM,EMM,AU,EMU?
    精解PSISI(一)
    Oracle第四课(学习笔记)
  • 原文地址:https://www.cnblogs.com/thescholar/p/12228327.html
Copyright © 2011-2022 走看看