我的 Django 应用程序中有以下 View ,效果很好。我对 python/django 很陌生。我想重构它,以便我有一个处理时间编码的函数,我可以调用它,这样我的 View 就不会那么困惑。
@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)
你会怎么做?函数应该返回什么,你会如何调用它?谢谢!
请您参考如下方法:
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
)
)
