我创建了一个库文件,我创建了一个函数假设:
[84, 12, 28, 21]
现在如果我需要请求对象(获取用户的详细信息或类似内容),如何在我的函数中不传递参数的情况下获取请求对象。
注意: 截至目前,我在我的参数中添加请求(如下所示),但是还有其他任何方法,如果我将此函数调用到我可能没有请求对象的任何其他函数。
def myfunc(param1):
----
--- do something
----
答案 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)