Job "WrappedAPIView raised an exception. TypeError: view() missing 1 required positional argument: 'request'

Job "WrappedAPIView raised an exception. TypeError: view() missing 1 required positional argument: 'request'

我使用 apscheduler 运行 一个每 5 秒调用函数 UserViewSet() 的作业。

views.py

    @api_view(['GET'])
    def UserViewSet(self):
       usersData=UserSerializer(UserDetail.objects.all().order_by('name'), many=True)
       return Response(usersData.data)

alerts_scheduler.py

from apscheduler.schedulers.background import BackgroundScheduler
from .. import views
from rest_framework.request import Request

def start():
    scheduler=BackgroundScheduler()
    scheduler.add_job(views.UserViewSet, 'interval', seconds=5)
    scheduler.start()

但每次我 运行 我的应用程序时,我总是收到“工作”WrappedAPIView 引发了一个 exception.TypeError:view() 缺少 1 个必需的位置参数:'request'”。

我在 apps.py 开始计划的工作,如下所示:

from django.apps import AppConfig


class AppbackendConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'AppBackend'

    def ready(self):
        from .app_scheduler import alerts_schedule
        alerts_schedule.start()

项目结构是这样的:

AppBackend

   app_scheduler
      __init__.py
      alerts_scheduler.py

   views.py

Django 视图接收请求并 returns 响应。无法将请求传递给 APScheduler。因此,尝试从 APScheduler 安排对视图的请求,或者编写一个单独的函数,向视图发出请求并将其安排为 运行.

例如,如果您想执行任何查询或更新任何更改,请不要调用视图,而是编写一个单独的函数,如下所示。

def test():
     usersData=UserDetail.objects.all().order_by('name')
     #do anything with the queryset

def start():
    scheduler=BackgroundScheduler()
    scheduler.add_job(test, 'interval', seconds=5)
    scheduler.start()

还有

@api_view(['GET'])
def UserViewSet(self):

应该是:

@api_view(['GET'])
def UserViewSet(request):