Django Rest Framework Business Logic

perp picture perp · May 12, 2015 · Viewed 11.1k times · Source

I am trying to create a backend with Django Rest Framework and am trying to determine where to place the business logic. Would it go in the views.py? I would like to create more complex services than just getting a list of objects or grabbing one specific object. Any guidance would be appreciated, thanks. I realize there is a discussion about the business logic in a generic Django project but I am asking specifically about the django rest framework.

Answer

Saeed picture Saeed · Sep 10, 2015

It is more about design patterns rather than Django Rest Framework.

Here are some tips:

  • Providing interfaces using REST should not involve any specific code related to data manipulation or business logic.
  • Using an MVC approach does not mean that you shouldn't layer your application.
  • You should be able to test your business logic without touching the UI at all.
  • Some people may suggest putting business logic in models. But I do not agree with them, since Django models are different from domain models and business related tasks such as tax calculation.
  • Before getting stuck in MVC, You could read more about The MVC implemented in MVC three-tier architecture
  • I suggest having a business layer and related apps putting your business logic there.

MVC + three-tier diagram

Suppose that you have an online coffee shop & you'd like to provide a REST API for ordering coffees.

Here are my suggested code samples:

myapp/views.py:

    def order(request, quantity=1):
        # Process the order by calling the mapped method
        order_id = CoffeeShopService.place_order(quantity)
        return HttpResponse({'order_id': order_id, mimetype='application/json')

myapp/services.py:

    class CoffeeShopService(object):
        @staticmethod
        def place_order(quantity):
           # do the business logic here
           return order_id