Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Rest Framework Business Logic

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.

like image 606
perp Avatar asked May 12 '15 17:05

perp


People also ask

What is Django REST Framework good for?

The Django REST framework (DRF) is a toolkit built on top of the Django web framework that reduces the amount of code you need to write to create REST interfaces.

Is Django REST Framework a framework?

Django REST framework is a powerful and flexible toolkit for building Web APIs. Some reasons you might want to use REST framework: The Web browsable API is a huge usability win for your developers. Authentication policies including packages for OAuth1a and OAuth2.


1 Answers

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 
like image 96
Saeed Avatar answered Oct 01 '22 10:10

Saeed