Django vi中的重构/清除时间函数

2024-09-29 21:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的django应用程序中,我有以下视图,它工作得非常好。我对python/django还很陌生。我想重构它,这样我就有了一个处理时间编码的函数,我可以调用它,这样我的视图就不会那么混乱了

@csrf_exempt
def emulate_create(request):
    args = json.loads(request.body, object_hook=utils._datetime_decoder)
    resourceId, count, hours = args['resourceId'], args['count'], args['hours']
    now = timezone.now().replace(second=0, microsecond=0)
    remainder = now.minute % 15
    delta = (15 - remainder)
    timeFrom = now + timedelta(minutes=delta)
    timeTo = timeFrom + timedelta(hours=hours)

    reservation = ReservationProspect(byUser=request.user, forUser=request.user, resource=get_object_or_404(Resource, uuid=resourceId), modality=get_object_or_404(Modality, name="online"), timeFrom=timeFrom, timeTo=timeTo, count=count)

    return HttpResponse(json.dumps([reservation.toDict()], default=utils._datetime_encoder))

我该怎么做呢?我认为这是应该提取到函数中的部分:

now = timezone.now().replace(second=0, microsecond=0)
remainder = now.minute % 15
delta = (15 - remainder)
timeFrom = now + timedelta(minutes=delta)
timeTo = timeFrom + timedelta(hours=hours)

你会怎么做?函数应该返回什么?您将如何调用它?谢谢


Tags: django函数视图objectrequestcountargsnow
1条回答
网友
1楼 · 发布于 2024-09-29 21:30:02
def time_encode(hours):
    now = timezone.now().replace(second=0, microsecond=0)
    remainder = now.minute % 15
    delta = (15 - remainder)
    timeFrom = now + timedelta(minutes=delta)
    timeTo = timeFrom + timedelta(hours=hours)
    return (timeFrom, timeTo)

这将是一个很好的起点。该函数返回一个元组(两个结果),可按以下方式使用

@csrf_exempt
def emulate_create(request):
    args = json.loads(
        request.body,
        object_hook=utils._datetime_decoder
    )
    resourceId, count, hours = args['resourceId'], args['count'], args['hours']

    timeFrom, timeTo = time_encode(hours)

    reservation = ReservationProspect(
        byUser=request.user,
        forUser=request.user,
        resource=get_object_or_404(Resource, uuid=resourceId),
        modality=get_object_or_404(Modality, name="online"),
        timeFrom=timeFrom,
        timeTo=timeTo,
        count=count
     )

    return HttpResponse(
        json.dumps(
            [reservation.toDict()],
            default=utils._datetime_encoder
        )
    )

相关问题 更多 >

    热门问题