如何获得'请求' django中自定义函数中的对象

时间:2016-11-16 11:28:20

标签: django django-views

我创建了一个库文件,我创建了一个函数假设:

[84, 12, 28, 21]

现在如果我需要请求对象(获取用户的详细信息或类似内容),如何在我的函数中不传递参数的情况下获取请求对象。

注意: 截至目前,我在我的参数中添加请求(如下所示),但是还有其他任何方法,如果我将此函数调用到我可能没有请求对象的任何其他函数。

def myfunc(param1):
    ----
    --- do something
    ----

2 个答案:

答案 0 :(得分:1)

我已经获得了解决方案,我可以安装像我们需要安装的TLSRequestMiddleware这样的中间件:

pip install django-tls

然后,

# settings.py
MIDDLEWARE_CLASSES = (
    'tls.TLSRequestMiddleware',
    ...
)

如果在django版本1.10中,您将包更新为:

try:
    from threading import local
except ImportError:
    from django.utils._threading_local import local

_thread_locals = local()

def get_current_request():
    return getattr(_thread_locals, 'request', None)

def get_current_user():
    request = get_current_request()
    if request:
        return getattr(request, 'user', None)

class ThreadLocalMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        _thread_locals.request = request
        return self.get_response(request)

还有像

这样的选项
pip install django-crum

然后,

# settings.py
MIDDLEWARE_CLASSES = (
     'crum.CurrentRequestUserMiddleware',
    ...
)

我希望这会有所帮助!

答案 1 :(得分:0)

您可以在网址

中传递参数

在你的urls.py中:

(r'^your_url/(?P<param1>\w{0,50})/$', views.your_view),

在views.py中:

def your_view(request, param1):
    # Do something

如果要在功能中传递请求。调用函数和传递请求:

your_view(request, param1)

在你的情况下:

def myfunc(param1, request=None):
    ----
    --- do something
    ----

如果您有请求,请致电

myfunc(param1, requests)

如果请求不可用,则只需致电

myfunc(param1)