Dans Odoo, la classe Controller, encapsulée dans le module web, sert d'interface pour gérer les requêtes HTTP. Elle fournit une structure pour le routage et le traitement des demandes web.
RequestHandler
Cette classe offre plusieurs méthodes utilitaires :
- masquer_mot_de_passe(args) : rempalce les caractères de mot de passe dans la requête par des astérisques.
- traiter_rpc(nom_service, méthode, paramètres) : gère les requêtes RPC. Le nom_service peut être 'common', 'db', 'object' ou 'report'.
- redirection_locale(chemin, requête=None, conserver_hash=False, transférer_debug=True, code=303) : redirige vers une nouvelle URL.
- redirection_avec_hash(url, code=303) : méthode de redirection incluant la valeur du hash local.
WebRequest
Classe parente pour les requêtes web d'Odoo. Ses propriétés incluent : httprequest, httpresponse, httpsession, env, context, session, lang, cr, debug, registry_cr, session_id, registry, db.
Décorateur route
Ce décorateur ancapsule les méthodes de traitement pour le routage des requêtes web. Il doit être appliqué à des méthodes de sous-classes de Controller.
Signature : route(chemin=None, **options)
Paramètres :
- chemin : chaîne ou liste, mappée au chemin dans l'URL.
- type : type de requête, 'http' ou 'json'.
- auth : méthode d'authentification, peut être 'user', 'admin' ou 'none'.
- methods : méthodes HTTP autorisées, par défaut toutes (GET, POST).
- cors : valeur pour les en-têtes CORS.
JsonRequest
Sous-classe de WebRequest, dédiée au traitement des requêtes JSON-RPC.
HttpRequest
Sous-classe de WebRequest, gère les requêtes HTTP et les réponses.
- fabriquer_réponse : pour les réponses non-HTML ou les en-têtes et cookies personnalisés.
- rendu : affiche un template QWeb.
- introuvable : gère les erreurs 404.
Exemple 1 : Créer un chemin /accueil qui retourne la chaîne "Bonjour Odoo !"
import odoo
from odoo import http
class MonControleur(odoo.addons.web.controllers.main.Home):
@http.route(['/accueil'], type='http', auth='none')
def afficher_accueil(self, *args, **kwargs):
return 'Bonjour Odoo !'
Exemple 2 : Créer un chemin /recherche qui redirige vers bing.com
import odoo
from odoo import http
from odoo.http import local_redirect_with_hash
class MonControleur(odoo.addons.web.controllers.main.Home):
@http.route(['/recherche'], type='http', auth='public')
def rediriger_vers(self, *args, **kwargs):
return local_redirect_with_hash('http://www.bing.com')