DEV Community

Nadim Chowdhury
Nadim Chowdhury

Posted on

How do you create a full backend API for an eCommerce website using Python Django?

In this guide, I will outline the file and folder structure required to build a full backend API for an eCommerce website using Django and Django Rest Framework (DRF). I'll also include the documentation links for each section to give you detailed references, but I will not include specific code. This structure assumes you're building an API that will handle categories, products, users, orders, etc.

Folder and File Structure

Here is the recommended file and folder structure for your Django eCommerce backend API project.



ecommerce-backend/
│
├── ecommerce_backend/          # Django Project Root
│   ├── __init__.py
│   ├── settings.py             # Settings for the entire project
│   ├── urls.py                 # Project-level URL configuration
│   ├── wsgi.py                 # WSGI entry point
│   ├── asgi.py                 # ASGI entry point (if using async)
│   └── manage.py               # Command-line utility for the project
│
├── apps/
│   ├── users/                  # App for handling user accounts
│   │   ├── migrations/         # Migration files for database changes
│   │   ├── __init__.py
│   │   ├── models.py           # User models
│   │   ├── serializers.py      # User serializers
│   │   ├── views.py            # User views (authentication, registration, etc.)
│   │   ├── urls.py             # URLs related to user actions
│   │   ├── permissions.py      # User permissions (admin, customer)
│   │   └── admin.py            # Register user model to Django admin
│
│   ├── products/               # App for managing products
│   │   ├── migrations/
│   │   ├── __init__.py
│   │   ├── models.py           # Models for Product, Category, etc.
│   │   ├── serializers.py      # Serializers for transforming models into JSON
│   │   ├── views.py            # Product views for listing, creating, etc.
│   │   ├── urls.py             # URLs related to product actions
│   │   └── admin.py            # Register product and category models to Django admin
│
│   ├── orders/                 # App for managing orders
│   │   ├── migrations/
│   │   ├── __init__.py
│   │   ├── models.py           # Models for Order, OrderItems
│   │   ├── serializers.py      # Order serializers
│   │   ├── views.py            # Views to handle order placement, status tracking, etc.
│   │   ├── urls.py             # URLs related to orders
│   │   └── admin.py            # Register order models to Django admin
│
│   ├── payments/               # App for handling payment processing
│   │   ├── migrations/
│   │   ├── __init__.py
│   │   ├── models.py           # Models for Payment, Transaction, etc.
│   │   ├── serializers.py      # Payment serializers
│   │   ├── views.py            # Views for handling payments
│   │   ├── urls.py             # URLs related to payments
│   │   └── admin.py            # Register payment models to Django admin
│
│   ├── cart/                   # App for managing shopping cart
│   │   ├── migrations/
│   │   ├── __init__.py
│   │   ├── models.py           # Models for Cart, CartItems
│   │   ├── serializers.py      # Cart serializers
│   │   ├── views.py            # Views to handle cart-related actions (add, remove, update)
│   │   ├── urls.py             # URLs related to cart
│   │   └── admin.py            # Register cart models to Django admin
│
├── env/                        # Virtual environment for Python dependencies (if using)
├── .gitignore                  # Git ignore file (to avoid committing unnecessary files)
├── requirements.txt            # List of Python dependencies
├── README.md                   # Documentation for your project


Enter fullscreen mode Exit fullscreen mode

Key Components of the Structure

1. Project Root (ecommerce_backend/)

  • settings.py: Configure your entire project here. Make sure to include apps like rest_framework, users, products, orders, etc.
  • urls.py: Central routing file that includes URLs for all the apps in the project.
  • wsgi.py and asgi.py: WSGI and ASGI files for serving the application (ASGI is used for async features like WebSockets).

  • Documentation:

2. Users App (apps/users/)

  • models.py: Define the User model (extend AbstractUser if customizing). This app will handle user registration, login, profile management, etc.
  • serializers.py: Serialize user data (login, signup) for JSON responses.
  • views.py: Define views for user registration, authentication, and profile updates.
  • urls.py: Routing for user-related actions (like /api/users/register/, /api/users/login/).

  • Documentation:

3. Products App (apps/products/)

  • models.py: Define Product, Category, and other related models (e.g., Brand, Attributes).
  • serializers.py: Serialize product data to JSON for API responses.
  • views.py: Handle CRUD operations for products (create, read, update, delete).
  • urls.py: Routes for accessing product data (like /api/products/).

  • Documentation:

4. Orders App (apps/orders/)

  • models.py: Define models for Order, OrderItem (relating products to orders), and their status.
  • serializers.py: Serialize order data for the API.
  • views.py: Handle the placement and management of orders.
  • urls.py: API routes for orders (like /api/orders/).

  • Documentation:

5. Payments App (apps/payments/)

  • models.py: Define models for payment transactions and statuses.
  • serializers.py: Serialize payment data for API responses.
  • views.py: Handle payment-related operations (integration with payment gateways).
  • urls.py: Routes for payment-related actions (like /api/payments/).

  • Documentation:

6. Cart App (apps/cart/)

  • models.py: Define models for Cart and CartItems.
  • serializers.py: Serialize cart data.
  • views.py: Handle adding, removing, updating cart items.
  • urls.py: API routes related to the cart (like /api/cart/).

  • Documentation:

Requirements

  • Virtual Environment: Make sure to create a virtual environment and install the necessary dependencies.


# Create virtual environment
python -m venv env

# Activate the virtual environment
source env/bin/activate  # MacOS/Linux
.\env\Scripts\activate   # Windows

# Install dependencies
pip install django djangorestframework


Enter fullscreen mode Exit fullscreen mode
  • Dependencies File: Add dependencies to requirements.txt.


Django>=3.2,<4.0
djangorestframework
django-cors-headers # For handling CORS in APIs
psycopg2 # For PostgreSQL integration (or another DB driver)
stripe # If you're using Stripe for payments

Enter fullscreen mode Exit fullscreen mode




Database

  • Default: Django uses SQLite for local development, but for production, it’s recommended to use PostgreSQL or MySQL.

  • Configure Database: In settings.py, you can configure the

database settings.

Documentation:

Admin Panel

For managing your eCommerce backend, Django’s admin panel allows you to manage products, orders, users, and more.

  • Register Models: Each app has an admin.py file where you register the models to appear in the Django admin.

Documentation:


This structure will serve as a solid foundation for a scalable and maintainable eCommerce backend API built with Django. You can add more advanced features as you go, such as:

  • Authentication: Use JWT for secure token-based authentication.
  • Pagination, Filtering, and Search: Add support for paginating and searching through large lists of products.
  • CORS Support: Add django-cors-headers for allowing API requests from different origins.

Further Reading and Documentation:

If you enjoy my content and would like to support my work, you can buy me a coffee. Your support is greatly appreciated!

Disclaimer: This content is generated by AI.

Top comments (0)