Фрагмент кода взят из кода представления django, но это не имеет большого значения.
Допустим, у меня есть следующий фрагмент кода ...
def unsubscribe(request):
#start of block
user = request.user
sid = request.POST.get('subscription_id')
try:
sub = Subscription.objects.get(id=sid)
except ObjectDoesNotExist:
return ajax_response(False, [('subscription', 'Given subscription does not exist.')])
if sub.user != user:
return ajax_response(False, [('subscription', 'Invalid permission.')])
#end of block.
sub.is_active = False
sub.save()
return ajax_response(True)
и произнеситеУ меня есть другая функция resubscribe()
, которая делает то же самое, что и вышеприведенная функция, за исключением того, что она sub.is_active = True
.
. В таком случае, какой будет лучший способ организовать код, чтобы код между#block
и #endblock
не дублируются?Я думаю, в общем, этот вопрос можно записать так:
Там есть блок кода, который копируется и вставляется во множество различных функций.однако этот блок кода содержит оператор return
.в таком случае, каков будет лучший способ абстрагировать эту часть логики?
РЕДАКТИРОВАТЬ: исправлен фрагмент кода.
РЕДАКТИРОВАТЬ2: На самом деле, простой способ решить этот вопросэто создание функции, скажем, toggle_active_status, которая принимает request
и логическое значение.(Я понял это после публикации вопроса).
Тем не менее, меня интересует случай, когда различная логика между функциями составляет более 1 строки ... как, скажем, код между #blockи #endlbock выполняет только проверку входных данных, и потенциально любая произвольная логика приложения может последовать.