What Are the Essential Components of Controller Request & Response in Odoo 18?
Odoo, as a powerful open-source ERP platform, relies heavily on its web controllers to handle HTTP requests and responses efficiently. Understanding the essential components of controller requests and responses in Odoo 18 is crucial for developers looking to customize or extend the system.

Introduction
Odoo, as a powerful open-source ERP platform, relies heavily on its web controllers to handle HTTP requests and responses efficiently. Understanding the essential components of controller requests and responses in Odoo 18 is crucial for developers looking to customize or extend the system. Whether you're working on an Odoo implementation or developing custom modules, mastering these components ensures seamless interaction between the frontend and backend.
In this blog, we’ll break down the key elements of Odoo controllers, explain how requests and responses work, and provide practical insights to enhance your development workflow.
Understanding Odoo Controllers
What Are Controllers in Odoo?
Controllers in Odoo are Python classes that inherit from http.Controller and define routes to handle HTTP requests. They act as intermediaries between the client (browser) and the server, processing incoming requests and returning appropriate responses.
Key Responsibilities of Controllers
- Routing Requests – Mapping URLs to specific Python methods.
- Processing Data – Handling form submissions, API calls, and user inputs.
- Generating Responses – Returning HTML, JSON, or file-based responses.
Essential Components of a Controller Request
1. Route Decorator (@http.route)
The @http.route decorator defines the URL path and request methods (GET, POST, PUT, DELETE) that a controller method can handle.
Example:
python
Copy
from odoo import http
class MyController(http.Controller):
@http.route('/my-page', auth='public', website=True)
def my_handler(self, **kwargs):
return http.request.render('my_module.my_template', {})
Parameters:
- URL Path (/my-page) – The endpoint to access the method.
- Auth (public/user) – Determines if authentication is required.
- Website (True/False) – Indicates whether the route is accessible via the website.
2. Request Object (http.request)
The http.request object provides access to:
- Request Data – Query parameters, form inputs, and uploaded files.
- Session & Cookies – User session details.
- Environment – Current Odoo environment (e.g., database, user).
Common Use Cases:
- Accessing GET/POST parameters:
python
Copy
name = http.request.params.get('name')
- Checking user authentication:
python
Copy
if http.request.env.user.id == request.session.uid:
# Authenticated user
3. Handling Request Methods
Odoo controllers support different HTTP methods:
GET Requests
- Used for retrieving data (e.g., loading a webpage).
- Example:
python
Copy
@http.route('/get-data', type='http', auth='user')
def fetch_data(self, **kw):
data = {"key": "value"}
return str(data)
POST Requests
- Used for submitting data (e.g., form submissions).
- Example:
python
Copy
@http.route('/submit-form', type='http', auth='public', methods=['POST'], csrf=False)
def handle_form(self, **post):
name = post.get('name')
email = post.get('email')
# Process data
return "Form submitted successfully!"
JSON Requests (type='json')
- Used for API interactions (e.g., AJAX calls).
- Example:
python
Copy
@http.route('/api/data', type='json', auth='user')
def get_json_data(self):
return {"status": "success", "data": [1, 2, 3]}
Essential Components of a Controller Response
1. Returning HTML Responses
Odoo uses QWeb templates to render dynamic HTML.
Example:
python
Copy
@http.route('/my-page', website=True, auth='public')
def render_template(self):
return http.request.render('my_module.my_template', {'values': data})
2. Returning JSON Responses
For API endpoints, JSON responses are preferred.
Example:
python
Copy
import json
@http.route('/api/status', type='json', auth='none')
def check_status(self):
return {"status": "active", "version": "Odoo 18"}
3. File & Binary Responses
Used for downloading files or generating reports.
Example:
python
Copy
from odoo.http import content_disposition
@http.route('/download-file', type='http', auth='user')
def download_file(self):
file_data = b"Sample file content"
headers = [('Content-Type', 'text/plain'),
('Content-Disposition', content_disposition('sample.txt'))]
return request.make_response(file_data, headers)
Best Practices for Odoo Controllers
1. Secure Your Endpoints
o Use auth='user' for sensitive routes.
o Enable CSRF protection (csrf=True) for forms.
2. Optimize Performance
o Avoid heavy computations in controllers; delegate to models.
o Use caching for frequently accessed data.
3. Handle Errors Gracefully
o Return proper HTTP status codes (404, 500).
o Use try-except blocks to catch exceptions.
4. Leverage Odoo’s Built-in Helpers
o request.redirect() – For URL redirections.
o request.make_json_response() – For standardized JSON replies.
Conclusion
Mastering the components of controller requests and responses in Odoo 18 is essential for building efficient and secure web applications. Whether you're customizing existing modules or developing new ones, understanding these fundamentals ensures smooth Odoo implementation and enhances user experience.
Need Expert Help with Odoo Development?
If you're looking to optimize your Odoo controllers or need professional assistance with customization, get in touch with our Odoo consultants today! Let’s streamline your ERP workflows and boost productivity.
???? Contact us now for a free consultation! ????
What's Your Reaction?






