Раньше на каждое действие делал отдельную функцию и путался, а возврат делал как попало. Открыл для себя паттерн: один обработчик на ресурс, который по методу HTTP разводит действие. Код стал компактнее, а объяснение — «один адрес, четыре метода» прозвучало на интервью убедительно.
Нейтрально: REST-стиль ожидает группировку действий над ресурсом. Django-func view может проверять request.method.
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def habits(request):
if request.method == "POST":
name = request.POST.get("name", "").strip()
if not name:
return JsonResponse({"error": "пусто"}, status=400)
h = Habit.objects.create(name=name)
return JsonResponse({"id": h.id}, status=201)
data = list(Habit.objects.values("id", "name"))
return JsonResponse(data, safe=False)
Собственный чистый view дал почти радость мастера: меньше копипаста, предсказуемые статусы. REST — не про слова, а про договорённость, которую теперь я умею держать.