在celery任务中访问request或request.user

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

我正在尝试访问 django celery 任务函数中的

request.user
但无法访问,因为该函数不接受任何请求实例,那么我如何访问它?

@shared_task
def run_everyday():
     return 0

我已经在 settings.py 中配置了 celery 函数每天运行,就像

CELERY_BEAT_SCHEDULE = {
    "run_day": {
        "task": "blog.tasks.run_everyday",
        "schedule": crontab(hour=10, minute=5),
    },
}

我尝试定义另一个函数来返回请求作为结果,但另一个函数需要传递请求已经像

@shared_task
def run_everyday():
     user = get_request_user()

     return 0

def get_request_user(request):
     return request.user

显示

请求未定义

那么我到底如何访问它呢?我是否需要创建一个中间件来获取 celery 任务视图中的 request.user ?如果是的话,效率会高吗?

python django cron celery django-celery
1个回答
0
投票

那么我到底如何访问它?

:这没有意义。 Celery 触发一个函数,但不涉及 HTTP 请求,也没有登录用户。该用户会是什么? Celery 只是在特定的时间戳触发一个函数。

这不是您查看页面时访问视图的方式。在这种情况下,浏览器会发送 HTTP 请求,Django 会预处理 HTTP 请求,例如通过查看会话 cookie,然后针对该请求设置用户。

但是当你运行一个函数时,只是经过一段时间后,这并不成立。

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